一、性能测试
1. 什么是性能测试?
性能测试是指在特定的负载条件下评估系统的性能和稳定性的过程。通过性能测试,可以发现系统在正常和峰值负载下的性能瓶颈,从而确定系统的性能水平、资源利用率和可扩展性。
2. 性能测试的重要性
性能测试是检验我们系统性能的重要步骤,只有经过性能测试,得到对应的测试报告,才能根据报告中所呈现的现象(成功率、响应时长、TPS等)来进行分析,找出系统的瓶颈所在,优化系统的性能。
3. 性能指标
- 响应时间:从发出请求到接收到响应的时间。
- 吞吐量:系统单位时间内能处理的请求数量。
- 并发用户数:系统能够同时支持的用户数量。
- CPU利用率:系统中CPU的使用率。
- 内存利用率:系统中内存的使用率。
- 网络带宽:系统能够处理的网络流量大小。
- 错误率:系统在处理请求时产生的错误数量。
- TPS: Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。他是衡量系统性能的一个重要指标。
4.性能的测试种类
- 负载测试:在不同负载条件下评估系统的性能。
- 压力测试:通过将系统推向极限,评估系统的性能稳定性。
- 容量测试:评估系统的吞吐量和资源使用情况,确定系统的可扩展性。
- 并发测试:评估系统在多个用户同时访问时的性能和响应时间。
- 效率测试:评估系统在处理大量数据时的性能和资源利用率。
5. 性能测试流程
- 确定测试目标和需求。
- 创建性能测试计划,包括测试环境、测试数据、测试工具等。
- 设计测试场景,包括模拟用户行为、创建负载模型等。
- 配置测试环境和测试工具。
- 执行性能测试,并收集性能数据。
- 分析性能数据,识别性能瓶颈和优化建议。
- 编写性能测试报告,并提交给相关人员。
二、性能测试基本工具
1.LoadRunner
(1)组成部分
-
Virtual User Generator(VUGen):用于录制和创建脚本,以模拟用户的行为。
-
Controller:用于设置测试场景、指定虚拟用户数量和负载模式,并进行测试。
-
Analysis:用于分析和报告测试结果,包括响应时间、吞吐量、错误率等指标。
(2) 使用LoadRunner进行性能测试的基本步骤
-
录制脚本:使用VUGen录制用户行为,或手动编写脚本。
-
配置场景:在Controller中设置测试场景,包括虚拟用户数量、负载模式等。
-
运行测试:启动测试,并监控系统的性能指标。
-
分析结果:使用Analysis分析测试结果,并生成报告。
(3) 优缺点
优点:1.支持用户量大(以万为单位) 2.提供精确的报表 3.支持ip欺骗
缺点:1.收费 2.体积大 3.无法定制
除了基本功能之外,LoadRunner还提供了许多高级功能,例如支持多种技术平台(Web、移动、数据库等)、支持多种协议(HTTP、FTP、SMTP等)以及支持自定义脚本等。总的来说,LoadRunner是一款功能强大的性能测试工具,可以帮助用户评估软件应用程序在不同负载条件下的性能表现,并提供详细的分析和报告。
2. JMeter
JMeter是一款开源的性能测试工具,由Apache软件基金会开发和维护。它可以用来模拟用户访问一个网络服务器、网络协议或者应用程序,以测试服务器的性能、负载和可靠性。
(1) 组成部分
1、测试计划:是使用 JMeter 进行测试的起点,它是其它 JMeter测试元件的容器
2、线程组:代表一定数量的用户,它可以用来模拟用户并发发送请求。实际的请求内容在Sampler中定义,它被线程组包含。
3、配置元件:维护Sampler需要的配置信息,并根据实际的需要修改请求的内容。
4、前置处理器:负责在请求之前工作,常用来修改请求的设置
5、定时器:负责定义请求之间的延迟间隔。
6、取样器(Sampler):是性能测试中向服务器发送请求,记录响应信息、响应时间的最小单元,如:HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBC Request Sampler等,每一种不同类型的sampler 可以根据设置的参数向服务器发出不同类型的请求。
7、后置处理器:负责在请求之后工作,常用获取返回的值。
8、断言:用来判断请求响应的结果是否如用户所期望的。
9、监听器:负责收集测试结果,同时确定结果显示的方式。
10、逻辑控制器:可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
(2) 特点和功能
-
多协议支持:JMeter支持多种协议,包括HTTP、HTTPS、FTP、JDBC、SMTP等,可以对不同类型的应用进行测试。
-
灵活的测试计划:JMeter提供了一个图形化用户界面,可以方便地创建和管理测试计划。用户可以定义测试场景、配置参数、设置定时器、添加断言等。
-
分布式测试:JMeter支持分布式测试,可以在多台机器上模拟大量用户同时访问目标服务器,以获得更真实的负载情况。
-
监控和分析:JMeter可以实时监控服务器的性能指标,如响应时间、吞吐量、错误率等,并生成详细的测试报告,用于分析和优化性能问题。
-
扩展性:JMeter支持自定义插件和脚本,可以根据不同的测试需求扩展功能。
(3) 使用JMeter进行性能测试的基本步骤
-
创建测试计划:打开JMeter,创建一个新的测试计划,设置目标服务器的相关信息。
-
添加线程组:在测试计划中添加一个线程组,设置并发用户数、循环次数等参数。
-
配置请求:在线程组中添加HTTP请求,设置请求方法、URL、参数等。
-
添加断言:添加断言来校验服务器的响应结果是否符合预期。
-
设置定时器:添加定时器以模拟用户的行为间隔时间。
-
运行测试:保存测试计划,点击运行按钮开始执行性能测试。
-
查看结果:测试结束后,可以查看测试结果的统计信息和详细报告,分析服务器的性能表现。
(4) 优缺点
优点:1.开源免费 2.体积小 3.有丰富的第三方插件
缺点:1.不支持ip欺骗 2.报表的精度比LR要差
总的来说,JMeter是一个功能强大、灵活易用的性能测试工具,可以帮助开发人员和测试人员快速有效地进行性能测试和负载测试。
三、 LoadRunner与Jmeter之间该如何选择?
-
功能需求:LoadRunner是一个功能强大的性能测试工具,支持多种协议和技术,如Web,移动,数据库,ERP等。它提供了广泛的扩展性和灵活性,可满足各种复杂的测试需求。Jmeter则是一个相对简单的工具,适用于简单的Web应用性能测试。
-
学习曲线:LoadRunner相对复杂,需要一定的学习成本。它有自己的脚本语言Vuser脚本,需要掌握。而Jmeter则相对简单易学,使用Java编写脚本,对于有Java基础的人员会更容易上手。
-
成本:LoadRunner是商业软件,需要购买许可证。而Jmeter是开源软件,免费使用。
-
社区支持:Jmeter拥有庞大的用户社区和丰富的文档资料,可以快速解决问题。LoadRunner的社区较小,文档相对较少。
根据以上几点综合考虑,如果你需要进行复杂的性能测试,对于工具的灵活性和扩展性有较高要求,同时拥有足够的预算,建议选择LoadRunner。如果你需要进行简单的性能测试,对工具的学习成本和成本有所考虑,或者你已经有了Java基础,建议选择Jmeter。
四、Jmeter工具使用
五、性能测试常用术语解释
并发:tps
线程数:跑道中参加赛跑的人数
迭代:每人跑多少圈
循环:一次迭代里面,循环跑其中的一条脚本,就是重复来回跑其中一条跑道
参数值:发请求时用的数据
参数化:这是一种策略,上面有介绍到它的具体用法
思考时间:模拟用户等待时间
关联:下一个请求入参依赖上一个请求中的某个返回值
检查点:判断请求的是否成功,一般只有查询请求才会加检查点,也就是断言
集合点:等待所有用户,同一时刻去发起请求,主要应用场景是购物中的秒杀
事务:一般把被测试中某个或者某几个请求一起定义成一个事务,是人为的测试定义,可以是整个下单流程,也可以是下单中的一个请求
负载:服务器的繁忙程度,如果一个服务器,每次可以同时处理8个请求,如果请求数量大,后面请求就排队,排队请求越多,服务器负载就越高
平均响应时间(art):每个事务处理时间,从发送请求到接收到的响应
tps:每秒处理事务数
每秒点击率(数):每秒处理请求数,而不是用户每秒发送请求数
六、利用百度网站进行性能测试(1000位虚拟用户同时登录网站)
如图所示:
查看结果生成树:
分析聚合报告: