开始写脚本!
常用插件:
jp@gc - Ultimate Thread Group:梯度加压
jp@gc - Stepping Thread Group (deprecated)步长加压,一般用于高并发找到极值并发数。
bzm - Concurrency Thread Group:启动n个线程在t时间段达到最大线程,其中经过m次阶梯增长,并在最大线程持续tt时间
bzm - Arrivals Thread Group:QPS概念 在t时间段达到最大QPS设置值,其中经过m次阶梯增长,并在最大QPS处持续tt时间
bzm - Free-Form Arrivals Thread Group:QPS概念,较随意
HTTP Request Defaults:可以放置host、post全局变量
HTTP Header Manager、HTTP Cookie Manager:header、cookie处理
JSR223 PreProcessor:前置处理器,借助groovy语言,设置脚本。
import java.util.Random;
String pre = "171";
String timeStamp = String.valueOf(System.currentTimeMillis());
Random random = new Random();
int rand1 = random.nextInt(10);
int rand2 = random.nextInt(10);
String ends = String.valueOf(rand1) + timeStamp.substring(7)+ String.valueOf(rand2);
vars.put("pthone_no",pre + ends);
问题:对请求数据加密解密算法要不要放在脚本里?
建议不要,会影响性能。
测试方式:
不考虑加解密实时性的情况下,跟开发沟通去掉加解密算法先,或者;或者事先将数据做好加密处理,并参数化处理。
考虑加解密实时性的情况,可以考虑加解密算法异步校验的方式,单独的机器进行异步校验;另一种方式可以与开发协商绕过校验步骤,采用test标识、万能token、通用token,计算加解密结果但服务不做校验,cpu性能尽量不受加解密影响
MD5加密算法演示:
导入相关的jar包Apache Commons Codec放在lib/ext目录下
import org.apache.commons.codec.digest.DigestUtils;
String username = '${user_prefix}${user_id}';
String password = '${paaword}';
String str = "username="+username+"&password="+password;
String sign = DigestUtils.md5Hex(str);;
vars.put("sign",sign);
实际工作中,各个公司的加密方式各有不同,将相应的加密jar包导入,放在lib/ext目录下,使用groovy脚本调用其加解密函数。
JSR223 PostProcessor:后置处理器
def out = new File("D:/project/jmeterproject/token").append('${token}'+'\n')
注意:使用该后置处理器谨慎勾选图上圈出来选项。
Debug Sampler:帮助排错,注意发压时去掉
View Results Tree:查看结果树,注意发压时去掉
Aggregate Report:聚合报告,注意发压时去掉。
- 缺点:数据实时展示,不能保存回看;只能本机测试人员查看,项目组其他人数据共享不方便
- 解决方案:采用influxDB+Grafana,将压测数据保存入库,并且以监控平台的形式展现出来,方便数据保存与共享。
JSON Extractor:正则匹配取值
JSON Assertion:json断言,一些复杂的校验会影响发压机的性能,比如:正则,可以尽量避免。
Counter:递增产生数据,适用于有规律的命令字段。
设计场景流程比例:Loop Controller【循环控制器】、If Controller【if控制器】
${__groovy(${__counter(true)}%2 == 0 )}
设置事务:Transaction Controller
插件:jp@gc - AutoStop Listener 设置error错误率、平均响应时间、平均延迟达到某值,自动停止执行,去分析原因
get请求:获取数据
post请求:提交数据,落库。
脚本运行排错:1.jmeter本身自带日志;2.查看服务器Spring.log
脚本运行产生的数据验证:mysql、Oracle,避免因为编码问题产生大量脏数据、异常数据。
关于请求IP地址不可重复的问题