一、JMeter使用
1. 需求:使用JMeter访问百度首页接口,并查看请求和响应信息
(1)步骤
(2)乱码解决
sampleresult.default.encoding=UTF-8
(3)请求响应不一致问题
当发送www.jd.com的http请求时,查看结果树看到的发送消息和HTTP取样器中配置的不完全一样?
原因分析:
- 查看结果数中最外层HTTP请求的 请求信息和响应信息,应该与子节点中最后一个HTTP请求的请求消息和响应消息一致;
- 配置的HTTP请求,应该与子节点中第一个HTTP请求的请求信息一致
- JMeter可以自动判断/处理响应状态码
2. 线程组
(1)概念
控制JMeter用于执行测试的一组用户
(2)特点
- 模拟多人操作 线程数的修改对应结果数的请求数目
- 线程组可以添加多个,多个线程组可以并行或串行 并行:默认并行,按照结果返回的快慢进行请求结果的返回(随机顺序) 串行:勾选“独立运行每个线程组(例如在个组运行结束后启动下一个)”会按照线程组添加顺序返回请求
- 取样器(请求)和逻辑控制器必须依赖线程组才能使用
- 线程组下可以添加其他元件下组件
(3)分类
- Setup线程组:预测试操作,所有脚本之前执行
- 普通线程组:执行测试用例,可以有1个或者多个(并行/串行)
- Teardown线程组:测试后操作,所有脚本之后执行
(4)常见参数与含义
实际应用:根据需求设置参数
- 线程数代表虚拟用户数,用户数越多,负载越大
- 循环次数代表运行时间,次数越多,运行时间越长
3. http请求参数介绍
举例
案例一(使用HTTP请求路径来传递get请求参数):
- 使用1个线程组,添加HTTP请求(百度),路径为:/S
- 协议:http
- IP:www.baidu.com
- 端口号:默认80
- 请求:GET
- 路径:/S
?wd=test
- 运行观察结果
案例二(使用参数列表来传递get请求的参数):
- 使用1个线程组,添加HTTP请求(百度),路径为:/S
- 协议:https
- IP:www.baidu.com
- 端口号:默认443
- 请求:GET
- 路径:/S
点击添加参数 wd test
- 运行观察结果
案例三(使用参数列表来传递POST请求的form格式参数):
- 使用1个线程组,添加HTTP请求(百度),路径为:/S
- 协议:https
- IP:www.baidu.com
- 端口号:默认443
- 请求:POST
- 路径:/S
点击添加参数(请求体) wd test
- 运行观察结果
案例四:
使用HTTP协议,POST请求方法,消息体数据中添加参数为: wd = test,运行观察结果
- 使用1个线程组,添加HTTP请求(百度),路径为:/S
- 协议:默认http
- IP:www.baidu.com
- 端口号:默认80
- 请求:POST
- 路径:/S
- *点击添加消息体数据(form/json)
wd=test
*- 运行观察结果
二、JMeter接口测试技术要点
1. JMeter参数化(重点)
- 定义:使用不同的测试数据,调用相同的测试方法进行测试
- 本质:实现测试数据与测试方法的分离。
- 实现方式: 1. 用户定义的变量 —— 全局变量2. 用户参数 —— 为每个用户分配不同的参数值3. CSV数据文件设置 —— 文件方式参数化4. 函数 —— 随机数据5. 数据库
(1)用户定义的变量-全局变量
- 作用 – 定义全局变量
- 步骤
- 使用:**
${变量名}
**
(2)用户参数
- 作用 – 针对同一组参数,不同用户来访时,使用有不同的值
- 位置 – 测试计划——线程组——前置处理器——用户参数
- 使用步骤1. 多用户,设置线程组数目2. 添加用户参数3. 添加请求并使用 1. 参数名2. 参数值:
${用户参数变量名}
【引用定义的变量名】4. 查看结果树
(3)CSV数据文件设置
- 作用 – 让不同用户,在多次循环时可以取到不同的值
- 位置 – 测试计划——线程组——配置元件——CSV数据文件设置
- 参数
- 使用步骤 1. 定义CSV数据文件2. 添加线程组,设置循环次数(看数据文件的条数)3. 添加CSV数据文件设置4. 添加请求
(4)函数参数化(_counter)
- 作用 – 自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,不需要提前定义
- 生成
- 使用(设置线程数&循环次数,${}使用)
(5)实例
2. Jmeter断言
断言:让程序自动判断预期结果和实际结果是否一致。
(1)响应断言
- 作用:对HTTP请求的任意格式的响应结果进行断言
- 位置:测试计划–>线程组–> HTTP请求–> (右键添加)断言–> 响应断言
- 参数
(2)JSON断言
参数
(3)持续时间断言(Duration Assertion)
检查程序响应时间是否满足要求
3. Jmeter关联使用
关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回
的数据,这时候就需要用到关联处理。
(1)正则表达式提取器
公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
.
:是通配符,可以代表任意字符(除换行回车)*
: 代表前面的字符出现0次或者多次.*
匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来 eg:<title>(.*)</title>
匹配title到/title内的任意多个字符,包含其他标签在内?
: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界 eg:<title>(.*?)</title>
匹配title到/title内的任意多个字符,不包含其他标签- 公式格式:左边界(.*?)右边界
- 作用:针对任意格式的响应数据进行提取
- 位置:测试计划–>线程组–> HTTP请求–> (右键添加) 后置处理器–>正则表达式提取器
- 参数
- 举例
案例1:获取传智播客首页的title,并作为参数传递
1、请求: http://www.itcast.cn/ ,获取网页的title值
2、请求: https://www.baidu.com/ , 把获取到的title作为请求参数
案例2:获取传智播客首页的地址,把第5个校区地址作为参数传递(span为地址的校区)
案例3:获取传智播客首页的地址,把第5个校区地址作为参数传递(span为:地址/地址一/地址二/地址三)
(2)XPath提取器
- 作用:针对HTMI格式的响应结果数据进行提取
- 位置:添加方式:测试计划–> 线程组–> HTTP请求 --> (右键添加) 后置处理器–> XPath提取器
- 参数
(3)JSON提取器
- 作用:针对JSON格式的响应结果数据进行提取
- 位置:添加方式:测试计划–> 线程组–> HTTP请求–> (右键添加) 后置处理器–> JSON提取器
- 参数
(4)JMeter属性
- 当有关联关系的两个请求在同一个线程组中时,可以使用三种提取器的变量来实现数据传递。
- 当有关联关系的两个请求在不同线程组中时, 如何进行数据传递呢? ——利用全局变量 ——JMeter属性函数可作为全局变量使用
① JMeter属性配置函数
_setProperty
函数:将值保存成JMeter属性
- 设置
- 使用:设置BeanShell取样器
_ property
函数: 在其他线程组中使用property函数读取属性
- 设置
- 使用:直接在其他线程组使用即可
练习
4. Jmeter自动录制脚本(理解非重点)
- 原理
- JMeter录制脚本:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本。
- 正常请求
- 录制时,JMeter作为代理服务器(拦截与转发)
- 录制步骤 1. 添加代理服务器2. 设置配置参数3. 开启浏览器代理4. 开始录制
版权归原作者 weixin_47249930 所有, 如有侵权,请联系我们删除。