1. Jmeter元件及基本作用域
作用域:
1)取样器: 核心,没有作用域
2)逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
3)其他元件:
- 如果是某个取样器的子节点,则该元件只对其父节点起作用
- 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
第一个案例:
2. 线程组的介绍
模拟用户,支持多用户操作
多个线程组可以串行执行, 也可以并行执行
线程组的分类:
- setup线程组:前置处理,初始化
- 普通线程组:编写脚本
- teardown线程组:后置处理, 环境恢复等
案例分析:
添加HTTP请求(百度)
1)配置线程组为2, 循环次数为3,运行观察结果
2)配置线程组为3, 循环次数为2,运行观察结果
相同点:请求数量相同
不同:
- 线程组:代表用户数,即性能测试的负载
- 循环次数:代表时间,即性能测试时的运行时间
3. HTTP请求
向服务器发送http或者https的请求
百度,路径为/S,使用 HTTP协议
1) get请求,路径中添加参数wd=test
2) get请求,用参数列表来传递get请求的参数
3)post请求,参数列表来传递wd=test
4)post请求,消息体数据中添加参数为: wd=test
4. Jmeter参数化
本质:使用参数的方式来替代脚本中的固定的测试数据
实现方式:
1)定义变量(最基础)
2)文件定义的方式(所有测试数据都是固定的情况下)
3)数据库的方式(灵活,业务测试常用)
4)函数的方式(灵活,业务测试常用)
4.1 用户定义的变量
作用:定义全局变量
步骤:
1)添加线程组
2)添加 配置元件-用户定义的变量。格式: 变量名-变量值
3)HTTP请求,引用定义的变量名。格式:${变量名}
4)添加查看结果树
4.2 用户参数
作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值
步骤:
1)添加线程组,设置线程组为n(表示模拟的用户数)
2)添加前置处理器-用户参数
第一列添加多个变量名,后续每一列为一组用户的数据
3)添加HTTP请求,引用定义的变量名。格式:${变量名}
4)添加查看结果树
4.3 csv 数据文件设置
作用:当不同的用户,或者同一个用户多次循环时,都可以获取到不同的值
1)定义csv数据文件
2)添加线程组
3)添加配置元件-csv数据文件设置
4)添加HTTP请求,引用定义的变量名。 格式:${变量名}
5)添加查看结果树
4.4 函数
作用:自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义
步骤:
1)添加线程组,设置虚拟用户数和循环次数
2)生成__counter 函数(工具-函数助手对话框)
3)添加HTTP请求,使用__counter函数。格式:${__counter(FALSE,)}
4) 添加查看结果树
5. Jmeter 断言
定义:检查实际的返回结果是否与预期结果保持一致
自动校验机制: 自动判断响应状态码(2xx:成功,4xx/5xx:失败)
jmeter断言:
- 响应断言:对任意格式的响应数据进行断言
- json断言:对json格式的响应数据进行断言
- 持续时间断言:对响应时间进行断言
5.1 响应断言
使用场景:任意HTTP请求的响应结果,都可以使用响应断言
1) 添加线程组
2)添加HTTP请求
3)添加响应断言
测试字段:要检查的项; 模式匹配规则:比较方式; 测试模式:预期结果
4)添加查看结果树
5.2 JSON断言
使用场景:对HTTP请求的响应结果为json格式时,可以使用json断言
1)添加线程组
2)添加HTTP请求
3)添加json断言:
- 填写Assert JSON Path exists :用于断言的json元素的路径,比如 $.data.location.name
- Additionally assert value:勾选是使用某个值生成断言
- Match as regular expression:使用正则表达式来断言
案例:https:/weather.cma.cn/api/now/54398
检查, 返回的json数据中, name对应的是顺义
5.3 断言持续时间
场景:测试HTTP请求的响应时间是否满足要求时,可以使用断言持续时间
1)添加线程组
2)添加HTTP请求
3)添加断言持续时间(单位:ms)
4)添加结果树
案例: 程序时间是否大于20ms