目录
Jmeter基础知识总结
一、Jmeter之请求参数的类型
二、Jmeter之http请求默认值
三、Jmeter之查看结果树
四、Jmeter配置元件之HTTP信息头管理器
五、Jmeter断言之响应断言
六、Jmeter断言之JSON断言
七、Jmeter断言之Xpath Assertion
八、Jmeter断言之BeanShell断言
九、Jmeter之用户自定义变量
十、Jmeter请求元件之参数化
十一、Jmeter之参数化函数助手_CSVRead
十二、Jmeter请求元件之函数助手randomstring
十三、Jmeter请求之正则表达式
十四、Jmeter请求元件之正则表达式提取器提取响应结果
十五、Jmeter请求元件之正则表达式提取器获取数组数据
十六、Jmeter请求元件之JSONPATH提取响应结果
十七、Jmeter请求之Cookie处理
十八、Jmeter请求之Token处理
本文主要对Jmeter基础知识点的总结。
1.参数(paramaters):键值对形式
参数名取决于接口文档中的传参
注意空格:如果报错,而且你确定你的参数值参数名没问题,检查是否带有空格
2.消息体数据(Body Data):json格式、 xml格式
3.文件上传(Files Upload):文件的上传的时候
参数的解释:
三个参数都是必填,否则报错。
Jmeter的坑:
参数和消息体数据只能二选一,否则报错。文件上传不影响。
1.添加方式:线程组-->右键-->配置元件-->http请求默认值
2.作用:http请求默认值,会在发送http请求的时候自带这些参数,复用的一个作用。
3.疑问:http请求默认值加了之后
1.添加方式:线程组--右键--监听器--查看结果树
2.Jmeter查看结果树的不同形式
什么是信息头:请求头
什么时候用?:传cookie、token或者其他信息的时候
场景设计:反爬虫添加信息头--模拟浏览器去发送请求--user-agent
范围:全局(线程组下)和局部(某个HTTP请求下)
断言的作用和loadrunner中的检查点类似,用于检查测试中得到的响应数据是否符合预期,用以保证性能测试过程中的数据交互与预期一致。
使用断言的目的:在request的返回层面增加一层判断机制。因为request成功了,并不代表结果一定正确,所以通过断言我们可以看到请求是否真正的成功。
使用方法:
如上图所示:
Apply to选项默认即可,Main sample only(仅作用于父节点取样器)
测试字段常用的有:响应文本(对响应结果进行断言)、响应头(对响应头文件进行断言)
模式匹配规则常用的有:包括(响应结果包括断言的内容)、相等(响应结果和断言结果相同)
测试模块可以添加你需要断言的部分,如果是包括,就可以添加多个
如果响应断言结果正确,在断言结果这里就只会返回对应的HTTP请求名称,如果失败,还会返回响应断言的结果。
JSON断言也是测试工作中经常用到的一种断言方法,它只能针对响应结果是application/json格式的请求进行断言。
使用方法:
下图展示断言结果为常量时,如何进行断言设置,如下图所示:
如果响应断言结果正确,在断言结果这里就只会返回对应的HTTP请求名称,如果失败,还会返回响应断言的结果。
定义:Xpath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。Xpath基于XML的树状结构,提供在数据结构树种找寻节点的能力。
作用对象:针对返回信息为Xpath的数据类型进行断言。
BeanShell断言支持各种开发语言,使用BeanShell断言的好处就是可以自由发挥,比如当断言失败,提示预期结果、实际结果、或者失败时把结果输出到日志。
使用方法:
String response = "";
String Str = {\"code\":\"401\""; //预期结果,需要校验的字段
response = prev.getResponseDataAsString(); //获取当前请求响应结果
if(response == ""){
Failure = true;
FailureMessage = "系统无响应,获取不到响应数据!";
log.info(FailureMessage); //对比数据库内容和响应内容,使用euqals方法判断是否一致
}
else if(response.equals(Str) == false){ //把断言失败置为真
Failure = true;
String Msg = "\n系统返回响应结果与期望结果不一致!请排查是性能问题,还是程序代码问题";
FailureMessage = Msg +"\n"+"期望结果:\n"+ Str +"\n" + "响应内容:\n" + response +"\n";
log.info(FailureMessage);
}
1.添加方式:测试计划-->右键-->添加-->配置元件-->用户定义的变量
2.为什么会有自定义变量?----提高脚本的复用性
3.自定义变量如何引用?----${变量名}
1.txt模式
本地新建txt文档,存储数据
比如登录的时候需要mobliephone,pwd两个参数
在对应的登录接口下设置循环次数,会大批量跑所有用例,当然,对应的http请求下的参数可直接用${变量名}获取
2.csv模式
操作方式同txt,但是csv格式会更好用,管理更加方便
1.添加方式:工具–函数助手对话框–找到__CSVRead函数
设置用于获取值的CSV文件,填写文件保存路径
设置CSV文件列号,需注意:CSVRead里面读取文件列是以0开始
设置成功后,执行http请求,如果有N条数据,记得设置线程数为N,循环次数为1,需注意这里和csvdata不一样的是不是设置循环次数为N,如果是设置循环次数为N代表着某个请求的取值循环了N次。
1.添加1个HTTP请求,设置为randomstring,以注册为例
2.添加方式:工具-函数助手对话框-找到RandomString函数
步骤:
1.准备好csv格式的数据
2.准备好接口,以注册接口为例
3.调用__CSVRead函数,传入对应的值
4.调用randomstring函数来设置随机的变量
5.设置线程组循环次数,查看结果${函数},如:${__RandomString(3,0123456789,)}
1.Jmeter必备正则表达式(在线正则表达式测试)正则表达式在线验证-在线正则表达式校验工具
元字符 |
意义 |
限定符 |
意义 |
. |
任意单个字符 |
+ |
匹配至少大于1次 |
\d |
任意单个数字 |
? |
匹配0次或1次 |
[0-9] |
等价0-9 |
* |
匹配0次或多次,贪婪匹配 |
[a-zA-Z] |
等价所有的大小写字母 |
{n,}、{n,m}、{n} |
匹配限定次数 |
如果你想在某个请求的响应结果里面拿到某个值
添加方式:线程组-->某个http请求下-->添加-->后置处理器-->正则表达式提取器
比如上传小文件成功后,查看响应结果:{"success":true,"code":0,"message":"","data":{"Url":"https://example.com:31333/upload?AppKey=3HQF6HWPD05SMKCKA332\u0026Signature=9ccbe68cc187671139fb7f97bd02d0df\u0026Timestamp=1691483469","Method":"POST","Header":{"Content-Type":"application/json","X-Ys-Version":"2023-05-30"},"Body":{"Path":"/4TpFKiuzKxE/common/test-mkdir/test.sim","UploadID":"4472d718-e633-472f-a35d-c6122783335e"}}}
比如我想提取UploadID的值
1.确定他的左右边界:"UploadID":"4472d718-e633-472f-a35d-c6122783335e"
2.写正则表达式:"UploadID":"([0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12})"
匹配数字0:代表随机 -1:所有值
3.如果想要查看正则表达式匹配的结果,可以添加调试取样器:添加--取样器–调试取样器
从上面截图可以看出,正则表达式提取成功啦。
注意:上述操作只提取了一个参数,如果想提取多个,可以设置多个参数
写正则表达式时:将你想要提取的参数用()括起来,()括号的作用是对数据进行分组
引用名称:你想要获取的参数名称
模板:$1$ $2$
1.找到左右边界
2.写好正则表达式
3.确定边界是唯一的,可以帮我们确定到值的
1.$表示根节点 .表示下一级
2.如何完成调用?---${变量名}
3.什么场景用?---json格式的数据 字典格式的键值对{"key":"value"}
4.添加方式:某个http请求下-->添加-->后置处理→JSON提取器
1.HTTP Cookie管理器
添加方式:线程组-->添加-->配置元件-->HTTP Cookie管理器
2.正则表达式提取器-->添加HTTP信息头管理器
1.HTTP Cookie管理器
添加方式:线程组-->添加-->配置元件-->HTTP Cookie管理器
2.正则表达式提取器-->添加HTTP信息头管理器
场景:登录–下载,下载需要用到一个token的参数值
如何确定这个问题?
采取的解决办法:正则表达式提取+变量引用