一. jmeter录制脚本优化
录制的脚本有很多“杂质”,如js、css等
1. 不需要的脚本
删除:右键,直接删除或禁用
左键选中第一个,按住shift键,同时选择最后一个,这样可以同时删除或者禁用多个
录制时,添加过滤
2. 条件头文件
cookie管理器
消息头管理器
HTTP缓存管理器做性能测试暂时不要加,因为做性能目的是得到每一次请求真实数据,如果使用缓存,就取得的是缓存,与用户第一次访问是有差别的
HTTP请求默认值用于域名、端口的配置,一般用的也比较少
3. 添加监视器
建议加上调试取样器(在取样器里)
4. 添加断言
做功能测试需要加,做性能测试不需要加
二. jmeter手写脚本
1. 选协议——取样器(HTTP Request)
2. 接口报文组装:接口文档api文档swagger(restful) F12 fiddler
accept:
application/x-www-form-urlencoded 浏览器表单提交格式
application/json;charset=utf-8 加编码是因为有的接口请求数据里含有中文,防止乱码
text/hml; 文本格式
multipart/form-data 表单
3. 监视器——查看结果树(View Results Tree)
4. 配置元件——请求头(HTTP Header Manager)cookie管理器(HTTP Cookie Manager)
举例:一个Content-Type为application/json的接口:
一般加两个,Content-Type和Accept
三. 控制器
1. 循环控制器:当前线程组内循环n次
循环控制器下面挂着注册接口
会循环四次,但从调试取样器看,只有一个线程组
将循环次数改为2,表示有2个线程组,循环4次,总共应该循环8次
2. ForEach控制器:循环变量名称相近
3. If控制器:条件判断
“变量” == “值” (javascript语法)
Interpret Condition as Variable Expression?当做一个变量判断真/假 (上面输入框用的是变量,不是表达式)
Evaluate for all children 执行子节点前先计算表达式真/假 (上面输入的表达式)
4. switch控制器:跳转到某个子取样器执行,输入子取样器名称
5. 随机控制,随机顺序控制器
随机控制:多个中随机选执行一个(只执行一个)
随机顺序控制器:随机打乱多个取样器的执行顺序(多个都执行)
6. 仅一次控制器
每个线程,只执行一次,登录场景常用,和setUp线程组相近
7. 吞吐量控制器
Total Executions 运行总次数
虽然有10个线程,吞吐量应该是10,但这里限制了总的吞吐量是5,因此只会执行5次
Percent Executions 运行比例(1-100)
三. jmete参数化
1. jmeter参数化与关联
用户自定义变量 User Defined Variables
用户参数 User Parameters
函数 function
csv读取文件 CSV Data Set Config
json提取 JSON Extractor
正则 Regular Expression Extractor
2. 变量命名规则
字母、下划线开头,可含数字,大小写敏感(java规则)
3. 用户自定义变量 User Defined Variables
配置元件Config Element > 用户自定义变量 User Defined Variables
运行中值不变
可以看到,用户自定义的变量userdefined的值没有变,而用户参数userparams每次都会发生变化
4. 用户参数 User Parameters
前置处理器 Pre processors > 用户参数 User Parameters
动态读取,值可能因读取而变化
如果把线程数设置为5,循环次数设置为1,同样也会变化
5. 函数function
Tools > 函数助手对话框Function Helper Dialog (ctrl + shift + f1)
选择函数Choose a function,帮助help 生成(自动复制)
随机函数 __Random eg:${__Random(1000, 9999, )}
设置属性 __setProperty eg:${__setProperty(randproperty, ${randomnum}, )}
读取属性 __P eg:${__P(randproperty, )}
关联函数 __V eg:${__V(A${N})}
时间函数 __time eg:${__time(.)} ${__time(YMD H:mm:ss,)}
这样可以实现变量跨线程组的调用
rd与上次运行的randomnum相同
时间函数
6. csv读取文件
配置元件Config Element > CSV 数据文件设置 CSV Data Set Config
支持csv格式、文本格式(txt/log/json/无后缀文本) --推荐,因为国内都习惯使用中文,如果csv文件用excel打开,它的编码不是utf-8,可能出现中文乱码,因此不推荐使用csv格式
变量名称:java变量命名规则,多个变量间用英文逗号
忽略首行:有表头是用(True/False)
分隔符;
遇到文件结束符再次循环?True/False
遇到文件结束符停止线程?True/False
线程共享模式
10个线程,总共6个数据,从第7个开始从头循环,因为设置的遇到文件结束符再次循环为True
这样会跑7次
7. 正则
后置处理器post processors > 正则表达式提取器 Regular Expression Extractor
模糊提取信息,作为后续操作的参数
apply to filed to check
name 变量名称
Regular Expression 正则表达式
template 模板,$1$代表第1个,$2$代表第2个
match No. 0代表随机,1代表第1个,-1代表全部
8. json提取
后置处理器 post processors > Json提取器JSON Extarctor
apply to
name 变量名称
json path expression json路径
规则:
$.开头
后面跟节点名称、列表时用中括号[0]
节点层级用 . 号
apply to 下的区别
Jmeter Variable Name to Use的使用
方法一:json提取
方法二:正则提取
10. 正则表达式
左右边界值,中间匹配内容用 () 代表用户括号内正则匹配
. 匹配除换行符以外的所有字符
* 匹配0的次或者多次——贪婪
+ 匹配1次或者多次——懒惰
? 匹配0次或者1次
. * .+
d d+ [0-9]+
w w+ 英文字母或数字的字符串
11. 断言
右键 添加 断言Assertion
响应断言 Response Assertion
或者:两个有一个成功即为成功
否是非的意思,不包含成功,包含失败