文章目录
- 系列文章目录
- 🖊今日学习目标
- 🖊上一篇内容回顾
- (1)JMeter基本使用
- (2)核心元件
- (3)Jmeter参数化
- 🖊作业
- 昨日作业答案
- 一、Jmeter断言
- 响应断言
- 案例1:检查百度首页的接口响应中包含“百度一下,你就知道”
- 案例2:响应断言中,有多个待效验的测试数据
- 二、JSON断言
- 总结:
- 断言持续时间:
- 三、Jmeter关联
- 正则表达式介绍:
- 案例二
- 正则表达式提取器
- 案例1:获取传智播客首页的title,并作为参数传递
- 案例2:获取传智播客首页的地址,把第5个校区地址作为参数传递(span为地址的校区)
- 案例3:获取传智播客首页的地址,把第5个校区地址作为参数传递(span为地址/后面带一、二、三)
- xpath提取器:
- 案例:获取传智播客首页的title,并作为参数传递
- json提取器
- 案例:提取天气接口中的城市信息,作为参数在访问百度首页时传递
- JMeter属性:
- 案例:
- 四、自动录制脚本
🖊今日学习目标
掌握Jmeter断言技术
掌握Jmeter关联使用
掌握Jmeter自动录制脚本
🖊上一篇内容回顾
(1)JMeter基本使用
元件:配置元件、前置处理器、定时器、取样器、后置处理器、断言、监听器
作用域:
取样器:是核心,本身无作用域
逻辑控制器:只对子节点起作用
其他元件:
父节点是取样器,只对父节点起作用
父节点不是取样器,对父节点的所有后代节点(子节点、子节点的子节点等)都起作用
执行顺序:
同一个作用域的不同元件:配置元件、前置处理器、定时器、取样器、后置处理器、断言、监听器
同一个作用域的相同元件:从上到下的顺序
(2)核心元件
线程组:
分类:普通线程组、setup线程组、teardown线程组
属性:线程数、ramp-up时间、循环次数、持续运行时间、延迟启动时间
HTTP请求
GET请求(在URL的路径中)
URL:协议、域名、端口、路径、请求方法GET、编码格式
参数:
在路径中添加参数。?参数名 = 参数值&参数名 = 参数值
在参数列表中添加。格式:参数名,参数值
POST请求(在消息体数据中)
URL:协议、域名、端口、路径、请求方法POST、编码格式
参数:
在参数列表中添加(只能添加form格式)
在消息体数据中添加(任意格式)
查看结果树
请求:请求行(URL)、请求体(参数)
响应:状态码、响应体
(3)Jmeter参数化
作用:使用不同的测试数据,调用相同的测试方法
用户定义的变量:定义全局变量
用户参数: 不同的用户使用不同的测试数据
CSV数据文件设置: 不同的用户,或者同一个用户的多次循环,都可以获取不同的数据
函数:不同的用户,或者同一个用户的多次循环,都可以获取不同的数据,不需要提前准备数据。
🖊作业
问题描述
当发送www.jd.com的http请求时,查看结果树看到的发送消息和HTTP取样器中配置的不完全一样?
原因分析:
查看结果数中最外层HTTP请求的 请求信息和响应信息,应该与子节点中最后一个HTTP请求的请求
消息和响应消息一致;
配置的HTTP请求,应该与子节点中第一个HTTP请求的请求信息一致
Jmeter可以自动判断/处理相应状态码
昨日作业答案
答案:
1、准备CSV数据文件 —— 1000个登录的用户名密码
2、添加线程组,设置线程数为1000
3、添加CSV数据文件设置
4、添加HTTP请求 - 登录,使用读取的用户名密码
5、添加HTTP请求 - 支付 —— 使用counter函数添加不同的测试金额
6、查看结果树
一、Jmeter断言
响应断言
案例1:检查百度首页的接口响应中包含“百度一下,你就知道”
案例2:响应断言中,有多个待效验的测试数据
二、JSON断言
参数:
案例:
请求: http://www.weather.com.cn/data/sk/101010100.html
检查:让程序检查响应的JSON数据中,city对应的内容是否为“北京”
总结:
断言持续时间:
案例:
请求: https://www.jd.com
检查:让程序检查响应时间是否大于100毫秒
三、Jmeter关联
正则表达式介绍:
正则表达式:就是一个公式,或者说一套规则,使用这套规则可以从任意字符串中提取出想要的数据内
容
公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
.:是通配符,可以代表任意字符(除换行回车)
*: 代表前面的字符出现0次或者多次 .
*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找 左边界和右边界
公式格式:左边界(.*?)右边界
百度一下,你就知道百度一下,你就知道(.*?)
案例二
原始文本:
021-1234-1234
022-1234-1235
023-1234-1236
024-1234-1237
025-1234-1238
026-1234-1239
027-1234-1230
要求:匹配出 城市号、地区号、个人号码三组
正则表达式匹配:
(.*?)-(.*?)-(.*?)\n
结论:
通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可
每一组数据都可以有一个或者多个值
正则表达式提取器
案例1:获取传智播客首页的title,并作为参数传递
案例2:获取传智播客首页的地址,把第5个校区地址作为参数传递(span为地址的校区)
响应中的地址格式显示:<p><span>地址</span>上海市浦东新区航头镇航都路18号万香创新港</p>
方法1
方法2
引用:以列表索引的方式来引用。格式:${变量名_索引} ,索引从1开始
案例3:获取传智播客首页的地址,把第5个校区地址作为参数传递(span为地址/后面带一、二、三)
地址格式1:<p><span>地址一</span>昌平区建材城西路金燕龙办公楼一层</p> 地址格式2:<p><span>地址</span>上海市浦东新区航头镇航都路18号万香创新港</p
xpath提取器:
案例:
//a[@id=‘kw’]: 在HTML页面中,找出a标签(有一个属性为id,且id的值为kw)
//a : 找出所有的a标签
案例:获取传智播客首页的title,并作为参数传递
json提取器
案例:提取天气接口中的城市信息,作为参数在访问百度首页时传递
JMeter属性:
案例:
1、线程组1:请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html,获取返
回结果中的城市名称“北京”**
2、线程组2:请求https://www.baidu.com/s?wd=北京 ,把获取到的城市名称作为请求参数**
四、自动录制脚本
原理:
jmeter脚本录制:
1.添加HTTP代理服务器,并进行配置
•加HTTP代理服务器:测试计划(右键)->非测试元件->HTTP代理服务器
•配置代理服务器的参数
2. 开启windows操作系统的浏览器代理
3. 启动代理服务器,开始录制
4. 在浏览器页面中进行操作,成功后,就能在JMeter当中看到抓取到的接口请求了。
练习: 设置过滤规则,录制tpshop的登录脚本,运行脚本观察测试结果
当使用代理的过程中,发现抓不到包,几个可能的情况:
过滤规则设置有问题
重启Jmeter代理服务器或者重启Jmeter
换浏览器来使用(Chrome、IE)
检查PC机中的代理设置是否处于可用状态
拔掉网线,抓包