NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

论性能测试

  • 2020-02-12
  • 本文字数:3285 字

    阅读完需:约 11 分钟

论性能测试

Part 1:性能测试

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。


A. 类别


性能测试包括负载测试、压力测试、基准测试等。


i. 负载测试


  • 通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。


ii. 压力测试


  • 也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等


iii. 基准测试

Part 2:性能测试目的

验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,对代码进行优化,最后起到优化系统的目的


i. 系统调优


ii. 识别系统中的弱点


iii. 评估系统的能力


iv. 验证系统的稳定性、可靠性

Part 3:性能测试流程

制定性能测试目标à选择性能测试工具à设计性能测试à执行性能测试脚本à监控分析系统à性能调优


A. 目标


例如:满足 3000 用户在线、240 个用户同时访问,访问响应时间不超过 2 秒,系统资源使用率不超过 30%


B. 工具


可选 LR、JMeter、Locust 等主流测试工具,这篇文章主要介绍 LR 和 JMeter 相关


C. 设计


测试脚本开发、负载生成规则、场景设计及监控方式、测试环境的搭建


D. 执行


根据需要进行基准测试、负载测试、压力测试等,搜集结果


E. 监控


监控各个节点的运行情况


F. 分析


对数据进行分析,需要众多人员共同协作,罩住数据背后的问题,确定性能瓶颈


G. 调优


确定以后,进行软硬件调优,然后重复之前的步骤,找到最合适的优化方案


H. 性能指标


i. 响应时间


  • 针对页面操作,用户感官满意响应时间<2s,可以接受响应时间 2~5s,如果响应时间>5s 用户将无法接受。

  • 针对内部调用的接口响应时间需要更快,具体与接口种类相关。


ii. 吞吐量


  • 一般结合业务需求而定


iii. 服务器资源占用


  • CPU 占用率

  • 内存使用率

  • Cache 命中率

Part 4:LR 篇

HPLoadRunner 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题


A. 轻松创建虚拟用户


i. 使用 LoadRunner 的 Virtual User Generator,您能很简便地创立起系统负载。该引擎能够生成虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为。


B. 创建真实负载


i. Virtual users 建立起后,您需要设定您的负载方案,业务流程组合和虚拟用户数量。用 LoadRunner 的 Controller,您能很快组织起多用户的测试方案。


C. 录制脚本


i. 参数化


  • 参数化可以让脚本更好的适应环境变化,提高脚本适应能力

  • 场景运行时,每个用户使用不同参数,提高真实性


ii. 关联与 session


  • 对于脚本,很多时候,我们处理数据的时候,是需要对服务端返回的数据进行解析,而服务端返回的数据如果每次都是变化的话,每次我们都是需要动态获取,这个时候就需要关联。简单来说,就是处理服务端返回的动态数据


iii. 创建集合点


  • 集合点就是为了让 Vuser 集合,然后同时做某个操作,只要在相应的请求前设定有意义的集合点 lr_rendezvous 即可


D. 执行监控


i. 在启动性能测试之后,系统会按照设定的场景产生压力。在执行过程中,需要观察脚本执行的情况,被测试系统的性能指标情况。LR 监控来查看这些信息


E. 分析报表


i. 一次性能测试执行完成,会创建各种性能分析报表,包括 cpu 相关、吞吐率、并发数等。

Part 5:JmETER 篇

A. jmeter 简介


Apache jmeter 是一个 100%的纯 java 桌面应用,用于压力测试和性能测量。它最初被设计用于 Web 应用测试但后来扩展到其他测试领域。Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl 脚本,java 对象,数据库和查询,FTP 服务器等等)的性能进行测试。它可以用于对服务器,网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。


  • 优点:开源,轻量级,免安装,跨平台。可支持二次开发和拓展。

  • 缺点:性能整体流程缺失,报告展示不够友好(逐渐被插件弥补)。


B. jmeter 进行性能测试原理


  • jmeter 脚本运行原理:jmeter 核心代码封装多种页面请求类型和多种 API 请求类型,提供 GUI 页面来填充参数,生成可运行的 xml 脚本文件,jmeter 能对脚本文件进行解析,并调用相应协议。这种方式方便脚本的编写,易上手,对代码要求较低,只需要掌握相应请求协议相关参数即可,且方便调试。插拔式的取样器支持无限制扩充测试能力,对于不支持的新协议,可以进行二次开发进行扩展。

  • jmeter 性能运行原理:Jmeter 性能原理与 loadRunner 类似。采用多线程来模拟多用户,通过对线程的开启运行的控制来达到实际用户增长的复杂需求。配置(可扩展)多种计时器,定时器。来实现用户集中某时间刻访问,即集合点概念,或着采取等待时间定时器模拟用户操作时间等待。实现更贴近于实际访问情况的性能测试方式,使性能结果数据更真实。

  • jmeter 数据采集原理:jmeter 提供对线程的监听,能将运行结果进行处理,如传递给 GUI 进行数据展示,和曲线生成,记录生成日志文件可以供非 gui 方式运行,提供运行完成后的性能数据分析。可以实时发送给时序数据库,提供监控使用,可以动态监控查看。


C. jmeter 性能测试步骤(前提:选型使用 jmeter 作为测试工具)


  • 性能需求分析确定:先确定此次性能测试目标,需求,收集性能需求参数,确定性能测试的测试环境情况与通过与否的判断条件。确定测试各种场景。

  • 脚本分析编写并调试:根据前期确定的各种场景进行脚本编写,设置请求,定时器模拟集合点,等待时间,设置为单线程运行脚本,测试脚本是否按预期执行,调试使脚本能够按预期执行。

  • 搭建好测试环境:根据需求搭建符合要求的测试环境,提前做好能够监控服务器运行状况的方式(cpu,内存,网络,DB 等),确保测试环境被测系统,运行参数配置正确,运行无误。

  • 执行性能测试,运行性能脚本:确定发送请求的用户数,执行测试的压力机是否能够支持发送这些并发数(根据压力机 cpu 与内存确定)如果达不到可以使用分布式压力机进行压测,确定测试机与测试环境网络互通且网络足够支撑压力测试运行。确定完成后即可根据需求确定脚本运行参数,使用 NO-GUI 方式进行性能脚本执行。

  • 对性能测试数据进行分析:运行完成后收集性能测试数据,对测试数据进行分析,可以导入到 jmeter 内监听器进行数据处理,或着采用其他处理方式,根据数据来验证需求是否满足,确认此次性能测试是否通过。


D. 基于 jmeter 性能测试平台


  1. 思路:统一管理 jmeter 的版本,性能需求维护,性能脚本与结果数据的统一管理,增加服务器的运行情况监视,从需求制定到结果分析在测试平台一站解决,简化了性能测试工作,将性能测试变成可视可控可管理状态。

Part 6:总结

1、性能测试是什么?


性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试与压力测试都是性能测试。负载测试主要是通过各种工作负载下系统的性能。随着负载的变化,来确定系统的性能变化。压力测试主要是确定的系统所能承受的极限。互联网金融客户群体相当庞大,所以对于我们来说系统的性能尤为重要。


2、性能测试做什么?


性能测试是通过使用各种工具,来模拟各种可控与不可控的请求。通过模拟生产运行的业务以及使用场景的组合形成多种性能测试点,测试系统的性能是否能够满足生产性能要求。在特定条件下运行验证系统承受能力。通过各项性能指标来判断系统是否达到生产需求,及时对系统做出风险评估。发现问题、解决问题,回馈用户高质量的体验。


3、性能测试做怎么做?


我们系统的性能测试利用市面上测试工具进行性能测试。这种测试方法可以捕获部分问题,但很难模拟业务场景组合。而且测试工具五花八门,不利于搜集测试性能结果。我们现在进行的性能测试开发,利用统一的性能测试工具 Jmeter 做为核心。利用 influxDB 数据库做数据收集,Grafana 做性能数据展示平台。搭建完整的性能测试平台,开放统一的性能测试通道,建立通一的性能指标收集平台。平台根据我们自己的业务要求建立性能测试计划,推出不同的业务模板。通过平台接口可进行合理的性能测试。我们可根据不同业务展示不同的性能图形。有利于测试人员及时定位问题。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/191


2020-02-12 15:29823

评论

发布
暂无评论
发现更多内容

架构实战营模块3作业-架构设计文档

En wei

架构实战营

架构实战营-模块3学习分享

En wei

架构实战营

Gartner 2021年主要战略技术趋势

车骑

组织转型 行业资讯 数字化 技术趋势 后新冠

SpringBoot-技术专题-教你使用Cache缓存组件

洛神灬殇

spring springboot cache 5月日更

天时地利人和—一个传奇操作系统的诞生记

兆熊

unix 历史

大米“绑上”区块链,江苏为农产品上“身份证”

CECBC

新人小白福利!五一假期怒肝一天整理Java类,不简单不全你打我

牛哄哄的java大师

Java

MySQL-技术专题-主从复制

洛神灬殇

MySQL MySQL 高可用 高可用架构 5月日更

字节一二三面,面经(已经OC)四月底真实面试经历!

Java大蜗牛

Java 程序员 面试 算法 后端

☕JVM技术之旅-带你认识GC回收的原理

洛神灬殇

Java JVM GC GC Root 5月日更

Boss直聘超90W次转发的Java面试题库!已超神

Java架构师迁哥

GreenPlum资源管理

数据社

greenplum 5月日更

Java开发项目模板16步快速搭建,拒绝重复性工作!

北游学Java

Java 项目 模板

CPU战争40年,终于把Intel打趴下了

Java架构师迁哥

深入理解spring框架之事务管理

邱学喆

mysql事务 spring事务管理 TransactionInterceptor Savepoint 事务传播行为

从简历被拒到收割8个大厂offer,我用了3个月成功破茧成蝶

Java架构之路

Java 程序员 架构 面试 编程语言

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

Java架构之路

Java 程序员 架构 面试 编程语言

不要轻言放弃,阿里P8架构师分享十年学习生涯

Java架构师迁哥

别再纠结“性能优化方案有哪些”了

追谏

面试 大前端

数字经济如何推动制造业高质量发展

CECBC

什么是线程安全?并发问题的源头

wzh

Java 并发编程 线程安全

常量之所想

顿晓

常量 5月日更

微信朋友圈的高性能复杂度

王华

架构实战营

Dubbo 动态配置中心

青年IT男

dubbo

【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿!

牧小农

JVM;

【LeetCode】搜索二维矩阵Java题解

Albert

算法 LeetCode 5月日更

【LeetCode】删除并获得点数Java题解

Albert

算法 LeetCode 5月日更

音视频编解码流程与如何使用FFMPEG命令进行音视频处理

张音乐

音视频 ffmpeg

去中心化、P2P、NAT浅析

IT酷盖

音视频 WebRTC 去中心化

出游时,请继续戴好口罩

石云升

新冠疫苗 5月日更

GitHub首次上线!华为顶级工程师手写的这份网络协议手册全面开源

Java架构之路

Java 程序员 面试 编程语言 计算机

论性能测试_文化 & 方法_闫亚威_InfoQ精选文章