目录
1、cookie管理器
cookie管理器专门用来管理客户端的cookie信息,一般用于需要登录的场景保持与服务器的会话,如果不设置cookie管理器,则无法在jmeter中保持会话。
添加方式:线程组--》添加--》配置元件--》cookie管理器,cookie管理器一般不需要专门设置,添加了就可以了
以mms医药管理系统为例子:
登录之后,服务器给浏览器发送了一个cookie,后续的接口在发送请求时需要携带这个cookie,如果你没有携带这个cookie,那么服务器就认为你没登录,把你重定向到登录界面
登录接口:
请求方法:post
请求url: http://192.168.47.130:8080/mms/Login/loginUser
请求头:content-Type: application/x-www-form-urlencoded; charset=UTF-8
请求参数:username: admin
password: 1234
登录后会自动发起一个获取登录用户名的请求
请求方法:get
请求url: http://192.168.47.130:8080/mms/Login/GetLoginName
如果不设置cookie管理器
登录请求
登录后请求
察看结果树结果
在该线程组下设置察看结果树之后,启动线程组,察看接口请求结果
可以查看到获取登录名这个接口,认为你没有登录系统,设置了重定向,查看第二个HTTP请求--GetLoginName时,查看响应体直接是回到了登录页面,让你去登录
设置cookie管理器之后察看结果树结果
设置cookie非常简单,只要点击线程组---》配置元件--》HTTP Cookie管理器添加上就行,不用任何操作,再次启动线程组,可以看到在获取登录名的接口中返回了json数据,没有在重定向
2、JMeter参数化
把测试数据组织起来,用不同的测试数据调用相同的测试方法
本质:使用参数的方式来替代脚本中的固定测试数据
实现方式:
-
定义变量(最基础)
-
文件定义的方式(所有测试数据都固定的情况下)
-
数据库的方式(灵活)
-
函数的方式(灵活)
2.1、用户定义变量
作用:定义全局变量
位置:测试计划--》线程组---》配置元件---》用户定义的变量
练习:
-
请求:百度一下,你就知道
-
要求:使用用户定义的变量配置被测系统的协议,域名和端口
操作步骤:
-
添加线程组
-
添加用户定义的变量
-
添加HTTP请求,在请求中引用用户定义的变量,格式为${变量名}
-
添加察看结果树
用户自定义变量如下:
在HTTP请求中的调用:
2.2、用户参数
作用:针对同一组参数,当不同用户来访问时,可以获取到不同的值
位置:测试计划--》线程组--》前置处理器--》用户参数
练习:
请求:百度一下,你就知道
要求:第一个用户请求附带参数:name=“张三”&age=28;第二个用户请求附带参数:name=”李四“&age=30
操作步骤:
1、添加线程组
2、添加用户参数
3、添加请求
4、添加察看结果树
运行之后,点击察看结果树---》点击请求--》点击Request Body可以看到请求的url,生成的俩个请求,请求参数不同
使用“用户参数化”的步骤?
1、添加线程组,设置线程数为n(表示模拟的用户数)
2、添加用户参数
-
第一列添加多个变量名
-
后续每一列为一组用户数据
3、添加HTTP请求,引用定义的变量名。格式:${变量名}
4、添加察看结果树
2.3、CSV数据文件设置
作用:让不同的用户在多次循环时,可以取到不同的值
位置:测试计划--》线程组--》配置元件--》CSV数据文件设置
思考:性能测试时,有多个用户登录,登录后循环添加商品,每次添加的商品参数不能相同,该怎么做?练习:
要求:循环请求3次我,每次请求时附带参数username,password,code的值不同
操作步骤:
1、定义CSV
2、添加线程组,设置循环次数为3
3、添加CSV数据文件设置
4、添加HTTP请求
5、添加察看结果树
2.4、函数(_counter)
作用:计数函数,一般做执行次数统计使用
位置:在菜单选择---》选项---》函数助手对话框
练习:访问百度首页百度一下,你就知道
要求:每个用户每次循环执行该脚本都可以使用不同的值
操作步骤:
1、添加线程组,设置虚拟用户数和循环次数
2、生成_counter函数
3、添加HTTP请求,使用__counter函数
4、添加察看结果树
5、作业
某支付系统,需要用1000个不同的用户登录,并使用添加不同的测试金额数据访问支付接口?
-
添加线程组
-
添加配置元件-CSV数据文件设置--读取CSV文件数据中的用户名密码
-
添加HTTP请求-登录,引用CSV数据文件设置中的变量
-
添加HTTP请求-支付,使用counter函数传入不同金额的测试数据
-
添加察看结果树
3、Jmeter断言
断言:让程序自动判断预期结果和实际结果是否一致
Jmeter中常用的断言:
--响应断言--对任意格式的响应数据
--JSON断言--对JSON格式的响应数据进行断言
--持续时间断言
3.1、响应断言
作用:对HTTP请求的任意格式的响应结果进行断言
位置:测试计划--》线程组---》HTTP请求---》(右键添加)断言---》响应断言
测试字段:要检查的项(实际结果)
响应文本:来自服务器的响应文本 即主体
响应代码:响应的状态码 例如200
响应信息:响应的信息,例如ok
Response Headers:响应头部
Request Headers:请求头部
Request Data:请求数据
URL样本:请求URL
Document(text):响应的整个文档
忽略状态:忽略返回的响应状态码
模糊匹配规则:比较方式
包括:文本包含指定的正则表达式
匹配:整个文本匹配指定的正则表达式
Equals:返回的文本内容包含等于字符串(区分大小写)
Substring:返回的文本内容包含指定字符串(区分大小写)
否:取反
或者:如果存在多个测试模式,勾选代表逻辑或,不勾选代表逻辑与
练习
请求:百度一下,你就知道
检查:让程序检查响应数据中是否包含“百度一下,你就知道”
1、添加线程组
2、添加HTTP请求
3、添加响应断言
4、查看响应结果
注意:只有在响应断言出错时,才会显示响应断言相关内容,如果断言成功,察看结果树里面的请求是绿色的。
3.2、JSON断言
作用:对HTTP请求的JSON格式的响应结果进行断言
位置:测试计划--》线程组--》HTTP请求--》(右键添加)断言--》JSON断言
练习:
请求:http://www.weather.com.cn/data/sk/101010100.html
检查:让程序检查响应的JSON数据中,city对应的内容是否为“北京”
1、添加线程组
2、添加HTTP请求
3、添加JSON断言(1、填写Assert JSON Path exists 2、勾选Additionlly assert value 3、填写Exected Value(期望结果))
4、察看结果树
3.3、持续时间断言
断言:检查HTTP请求的响应时间是否超出要求范围
位置:测试计划--》线程组--》HTTP请求--》(右键添加)断言--》断言持续时间
参数:持续时间(毫秒):HTTP请求允许允许的最大响应时间(单位:毫秒)。超过则认为失败
练习:
请求:京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!
检查:让程序检查响应时间是否大于100毫秒
操作步骤:
1、添加线程组
2、添加HTTP请求
3、添加断言持续时间
4、添加察看结果树
3.4、xpath断言
断言类型:主要用于HTML格式的响应断言
以mms管理系统为例,断言登录后的能否定位到首页的注销按钮和信息查询
断言元素的获取和之前selenium一致,如果断言多个条件,是用and来连接的。区别有如果获取文本,直接使用在获取的元素后面加/text()="文本值",如果是获取任意属性值就是/attribute::属性名="属性值"
1、设置HTTP cookie管理、见1、HTTPcookie管理器那里的设置步骤
2、设置登录的HTTP请求,见1、HTTPcookie管理器那里的设置步骤
3、设置首页的HTTP请求
4、设置XPath断言
选中HTTP-index请求--》添加---》右键选择断言--》XPATH断言
如果能断言通过,可以看到http://192.168.47.130:8080/mms/mms/index.html请求正常,如果断言没有通过,在这条接口请求下就会显示xpath断言失败
如果是定位多条内容的话,要加and,在断言信息查询的id属性是否为SC
4、Jmeter关联
关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求的返回数据,这时候就需要用到关联处理,jmeter的关联方式,就是使用提取器,提取上一个请求的数据,把这个提取的值,在下一个接口中引用。
Jmeter中常用的关联方法:
-
正则表达式提取器:提取任意格式的响应数据
-
XPath提取器:提取HTML格式的响应数据
-
JSON提取器:提取JSON格式的响应数据
4.1、正则表达式提取器
正则表达式:正则表达式就是一个公式,或者说一套规则,使用这套规则可以从任意字符串中提取除想要的数据内容
公式格式:左边界(匹配符号)右边界,可以提取出想要获取的数据内容 .:通配符,可以代表任意字符额(除换行回车) *:代表前面的字符出现0次或者多次 .*:匹配规则:找到左边界后,往右查找匹配右边界,找到最后面的右边界,中间的所有数据都被记录下来 ?:代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找,再次查找左边界和右边界
案例一:
例如:HTTP请求http://www,baidu.com,将响应结果放在在线正则表达式测试在线测试工具中
将<title>百度一下,你就知道</title>在复制一次,放在这个响应结果里面再次点击测试匹配,测试结果如下:
会提取除中间数据,此时给正则表达式增加一个?号,如下,结果能全部匹配,不含其他多余数据
补充说明:模板里面的意思是,正则表达式中可能有个多个要匹配的内容,$1$就是获取第一个正则表达式要匹配的内容
案例一练习:
1、请求:腾讯网获取网页的title值
2、请求:百度一下,你就知道把获取到的title作为请求参数
操作步骤:
1、添加线程组
2、添加HTTP请求-QQ
3、添加正则提取器
4、添加HTTP请求-百度请求
5、察看结果树
4.1.1、查看正则表达式提取器中的变量
1、添加一个HTTP请求:https://woniuxy.com/
2、F12查看网页源代码,提取<span>里面以开发结尾的前面的值
3、 添加一个正则表达式提取器
4、添加一个Debug Sampler
点击线程组--》添加--》取样器--》Debug Sampler,只添加就行了,不需要做其他配置
5、添加察看结果树,启动进程,然后察看结果树种查看Debug Sampler,可以看到正则表达式提取出来非常多的值
6、如何获取我们想要的值呢?加入我们想要获取的是java测试,那么我们在下一个接口需要的参数要引用时,变量值就设置为${city_4}
此时察看结果树,可以看到关联接口的值获取到了java测试
4.2、XPath提取器
使用方式:提取的响应结果为HTML
位置:添加方式:测试计划--》线程组--》HTTP请求---》(右键添加)后置处理器--》XPath提取器
练习:
1、请求:https://www.itcast.cn/获取网页的中北京昌平的值
2、请求:http://www.baidu.com/,把获取到的city作为请求参数
1、添加线程组
2、添加的HTTP请求
3、添加XPath的提取器
-
勾选User Tidy
-
引用名称:存放提取出的值的参数名称,
-
XPath Query:用于提取值的XPath表达式
-
匹配数字
4、添加HTTP请求
5、察看的结果树
4.3、JSON提取器
作用:针对JSON格式的响应结果数据进行提取
位置:添加测试计划--》线程组--》HTTP请求--》(右键添加)后置处理器--》JSON提取器
练习:
1、请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html,获取返回结果中的城市名称“北京”
2、请求:百度一下,你就知道北京,把获取到的城市名称作为请求参数
1、添加线程组
2、添加HTTP请求,查看城市天气
3、添加JSON提取器,提取城市名称
4、添加HTTP请求,百度请求,将城市名称作为参数传入
5、察看结果
5、跨线程组传参-BeanShell取样器
使用JMeter属性实现关联
作用:跨线程组的数据传递,可以使用JMeter的属性
JMeter属性的配置函数:
_setProperty函数:将值保存成JMeter属性
_property函数:在其他线程组中使用property函数读取属性
练习:
1、线程组1:请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html,获取返回结果中的城市名称“北京
2、线程组2:请求:百度一下,你就知道北京,把获取到的城市名称作为请求参数
操作步骤:
1、添加线程组1
2、添加HTTP请求-天气
3、添加JSON提取器
4、添加BeanShell取样器(将JSON提取器的值保存为JMeter属性)
第一步:设置全局变量值并生成函数
点击工具栏选项--》函数助手对话框,选择_setProperty,属性名称命民为P_city,属性名称下面有个Value of property,值设置为${city},然后点击生成,复制生成的函数。
第二步:在BeanShell取样器中,添加_setProperty生成的函数
第三步:添加一个Debug Sampler,这一步的目的是查看全局变量是否设置成功
点击线程组--》添加--》取样器---》Debug Sampler
5、添加线程组2
6、添加HTTP请求-百度(读取JMeter属性)
第一步:获取JMeter的属性值
第二步:在百度请求中,将生成的函数字符串作为变量传递给参数
第三步:由于俩个线程组是有先后顺序的,所以要点击测试计划--》勾选独立运行每个线程组
7、添加察看结果树
在Debug Sampler中可以查看到获取的city值,在HTTP请求可以查看到北京作为参数传递到wd中
查看百度的参数接收成功:
6、JMeter录制脚本
-
通过jmeter自带代理服务器进行录制
-
jmeter脚本录制的原理:jmeter脚本录制的原理就是在客户端和服务器之间加了一个jmeter作为代理,jmeter会拦截客户端请求,然后jmeter把请求发给服务器,又会把服务器的的响应经过jmeter转发给客户端
-
-
设置方式
1、测试计划--》添加---》非测试元件--》HTTP代理服务器,通过代理服务器进行录制,需要设置jmeter的端口
为了避免设置端口时出现冲突,可以在doc命令行中输入netstat -ano | findstr 8888,查看有无端口占用情况。如果没有占用,输入命令回车无返回。
2、设置jmeter过滤
HTTP代理服务器上面有个Request Filtering,打开点击添加建议排除,可以排除掉一些加载的图片和js 等,方便查看接口请求
3、设置浏览器代理
点击浏览器设置--》输入框搜索代理---》打开您的计算机代理设置--》搜索设置代理
此时刷新要录制网站,可以查看到线程组下面有了请求