Jmeter性能测试知识点
性能测试
一、测试理论:
1. 性能指标概念:
①吞吐量:每秒服务器处理请求个数和事务数
②响应时间:一个任务(事务)完成所花费的时间
③并发数:同时操作的用户个数
④最大并发数:在给定的预期平均响应时间下,系统最多能支持多少个并发用户。这个数据就是实际可以同时使用系统的用户数
⑤TPS:每秒传输的事物处理个数,即服务器每秒处理的事务数。TPS值越大,一秒钟处理的事务数就越多,说明处理速度越快,软件的效率就越好。计算:二八原理(80%的业务量在20%的时间里完成,确定tps)
⑥同步定时器(设置集合点,保证并发数同时运行):
A.Number of Simulated Users to Groupby:每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。如果设置为10,即集合10个线程等待,同时发送请求。注意:设置此数量不能超过线程组中的线程数量。
B.Timeout in milliseconds:如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users toGroup"中设置的值才释放。如果一直没有达到,则会一直等待,除非手动关闭执行。如果大于0,那么如果超过Timeout inmilliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users toGroup"中设置的值,Timer将不再等待,释放已到达的线程。默认为0
2. 测试类型概念:
①基准测试:是一种测量和评估软件性能指标的活动。在特定时期(系统稳定时)通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响。基准测试可以比较系统在版本迭代过程中,各个性能指标的变化,为系统的版本迭代优化提供参考。
②负载测试:系统在不同负载下的性能表现,通过负载测试能够测试出系统在各种负载下的性能变化曲线,发现系统的性能拐点,从而找出系统的最佳性能。举例:用户并发测试(递增并发用户数,查看系统性能指标变化)。
③稳定性测试:通过对软件稳定性的测试可以观察在一个运行周期内、一定的压力条件下,软件的出错机率、性能劣化趋势等。进而大大减少软件上线后的崩溃卡死等现象,为软件的逐步优化提供方向及验证。
二、实现步骤
1. 负载测试寻找性能瓶颈,找出最大并发数
①修改线程数一次一次增加线程数
②jp@gc - Stepping Thread Group
Rps平均值/汇合报告平均响应时间
this group will start:表示总共要启动的线程数;若设置为 100,表示总共会加载到 100 个线程
first,wait for:从运行之后多长时间开始启动线程;若设置为 0 秒,表示运行之后立即启动线程
then start:初次启动多少个线程;若设置为 0 个,表示初次不启动线程
next add:之后每次启动多少个线程;若设置为 10个,表示每个梯次启动 10 个线程
threads every:当前运行多长时间后再次启动线程,即每一次线程启动完成之后的持续时间;若设置为 30 秒,每梯次启动完线程之后再运行 30 秒
using ramp-up:启动线程的时间;若设置为 5 秒,表示每次启动线程都持续 5 秒(和基础线程组的ramp-up一样意思)
then hold load for:线程全部启动完之后持续运行多长时间,如图:设置为 60 秒,表示 100 个线程全部启动完之后再持续运行 60 秒
finally,stop/threads every:多长时间释放多少个线程;若设置为 5 个和 1 秒,表示持续负载结束之后每 1 秒钟释放 5 个线程
2. 线程组设置:
①线程数:设置线程数,可以在测试计划的用户自定义变量中设置变量
②ramp-up时间: 设置启动所有线程需要的时间
③循环次数:设置线程组中的每个线程循环次数
④永远:勾选此项表示线程组中的线程永久执行下去
⑤same user on each iteration:每次迭代使用相同的线程
⑥延迟创建线程直到需要:如果勾选了此选项,那么线程只会在合适的需要用到的时候创建
⑦调度器:线程调度器包含持续时间、启动延迟两个选项
⑧持续时间:设置线程组运行多长时间,单位是秒
⑨启动延迟:设置线程启动延时时间,单位是秒
3. 怎样分析查看性能问题
网络宽带问题、访问数被限制、内存不足、服务器性能不足、sql语句查询太慢、主键冲突、索引失效
4. 设置全局变量
①在一个请求响应中,通过JSON Extractor获取局部变量值,命名为token
②用后置处理器BeanShell PostProcessor设置全部变量
脚本输入:${__setProperty(tokenG,${token},true)},tokeG即为全部变量名
③使用全局变量,${__property(token)}
5. While循环、if语句
(${__jexl3("${flag}"=="0",)})
6. JSR233后置处理程序
①下载插件jython-standalone-2.7.2放入lib目录下
②脚本例子:
import sys
import json
reload(sys)
sys.setdefaultencoding("utf8")#定义脚本编码格式
null=None
aaz217 ,aac001,aab001 = '',’’,’’
datas = vars.get("data")#获取参数值
Id_Card = vars.get("Id_Card")
for data in eval(datas):
if dict(data)["aac002"] == str(Id_Card):
aaz217 = data["aaz217"]
aab001 = data["aab001"]
aac001 = data["aac001"]
vars.put("aaz217",str(aaz217))#存储aaz217到变量aaz217
vars.put("aab001",str(aab001))
vars.put("aac001",str(aac001))
SampleResult.setResponseData("{}".format(aaz217))#设置响应信息
SampleResult.setResponseData("{}".format(aab001))
SampleResult.setResponseData("{}".format(aac001))
③调用第三方库
要注意的是,用C写的第三方库,jython是调用不了的。jython只支持python2,不支持python3.所以还要专门装一个用于压测的python2.7.如果要调用第三方库,在代码里添加搜索路径就行了。在代码最前面加上下面3句
import sys
sys.path.append('C:\Users\laiqu\AppData\Local\ProgrPython\Python27\Lib")
sys.path.append('C:\Users\laigu\AppData\Local\Progrms\Python\Python27\Lib\site-packages")
7. CSV数据文件设置
8. 调试取样器
显示存储变量的值
9. 同步定时器
当模拟用户组的数量全部运行完后才会进行接下来的请求,相当于设置集合点
10. 录制
①打开浏览器的计算机代理设置,找到手动代理,将代理IP设置为本机,端口为8888点击保存
②打开jmeter添加一个HTTP代理服务器。
Global Settings:全局设置
端口:设置JMeter代理服务器所要用的端口,不能被占用,否则JMeter无法使用。默认启用8888端口。可以在CMD中使用netstat -ano|findstr "8888"查看端口是否被占用。
HTTPS Domains:编写代理主机的域名或者主机IP地址,可以对指定地址进行请求录制。
test plan content:测试计划内容。
目标控制器:当进行录制时必须选择一个线程组将录制的接口信息保存到线程组下
Requests Filtering:请求过滤
包含模式:使用它可以过滤URL路径,只有取样器的完整URL匹配通过,该正则表达式才会被记录。
排除模式:使用它可以过滤URL,满足该条件的请求不会被录制。
.*\.(js|css|PNG|jpg|ico|png|gif).*
③所有准备都好了之后,点击启动开始录制