Jmeter****使用mock测试性能
一、****背景
使用jmeter测试接口性能,接口调用逻辑如下:
Ø app—调用—>后台接口—调用—>第三方接口,准备压测的接口为后台接口。由于第三方接口暂未符合要求,不能被调用,但是调用后台接口的时候依赖第三方接口的返回值。这时候需要屏蔽第三方接口,给后台接口设置挡板,然后进行压测。
Ø 后台接口调用需要先获取access_token,由登录接口返回。
二、****工具
jmeter , fiddler , aliyun(资源监控)
三、脚本设计思路:
i. 登录接口只需登录一次,使用正则表达式提取登录接口返回的access_token,然后把access_token设置成全局变量,后台接口拿到access_token后,循环调用。
ii. 使用fiddler给后台接口设置挡板,配置完成后,在jmeter的后台接口配置代理服务器地址。
四、****详细操作步骤
Jmeter****设置
1、设置http请求默认值:http协议和ServerName
2、新建线程组,命名为【login】,右键点击【login】线程新建http request请求,命名为【获取token】,新建【察看结果树】,执行后可以看到返回的access_token。
3、右键点击【获取token】请求,分别添加Regular Expression Extractor、Bean Shell Post Processor、JSON Extractor,详细设置参数如下,变量名需要根据自己实际设置的填写:
access_token 、”access_token”:”(.*?)” 、
String access_token=bsh.args[0];
print(access_token);
{access_token},)}
access_token 、 $.request_access_token
4、新建一个线程组,命名为【后台接口】,请求头的Authorzation值为接口返回的access_token
5、(重要)在测试计划中勾选第一项
中文解析:独立运行每个线程组(在一个组运行结束后启动下一个),否则会出现后台接口拿不到token而导致报错。
6、运行脚本,返回成功
Fiddler****挡板设置
1、选择AutoResponder,点击Add Rule
2、输入【获取缴费信息】接口地址,选择返回的报文信息test.txt,点击save。勾选Enable rules
Test.txt内容如下,可以手动任意设置
3、fiddler设置代理端口: Tools - > Options - > Connections。
默认为8888,我本机的已被占用,所以设置为8880。(任意设置)
4、jmeter设置代理
127.0.0.1为本机地址,即常用的localhost,端口设置为8880
5、目前为止,所有设置已完成,调试执行结果如下
性能设置
1、 标题为mock性能,这时,我们只需要设置后台线程组的循环执行时间既可
设置5个虚拟用户,并发1800s(30分钟)
2、添加以下监控:Aggregate Report 、jp@gc - Active Threads Over Time、jp@gc - Transactions per Second、
注意:性能执行过程中需要把View Results Tree关闭,因为回显返回值会占用压测机的资源。
性能结果分析
1、按照以上步骤执行完成后,点击Aggregate Report查看结果,主要关注3个参数:95%Line、Error%、Throughput(tps)
95%Line:95%line的响应时间,单位为ms,上面为95%的请求响应时间为0.27s
Error%:错误率,如果是支付类型的接口,涉及到钱的,基本是不允许有错误率。如果是一些简单的业务,可允许小错误率,例如1%。得看具体场景来定。
Throughput:吞吐量,即每秒钟处理的请求事务数,TPS值根据它来确定。
(本接口业务方提供的tps为50,测试实际结果为89.9/sec,所以符合要求)
2、资源消耗:根据下面的图表分析,CPU和MEM都低于80%的使用率,服务器正常
应用服务器
数据库服务器
结果:性能结果满足业务方提供的需求