Jmeter参数化、断言及接口关联(二)

目录

1、cookie管理器

 2、JMeter参数化

2.1、用户定义变量

2.2、用户参数

2.3、CSV数据文件设置

2.4、函数(_counter)

3、Jmeter断言

3.1、响应断言

3.2、JSON断言

3.3、持续时间断言

​3.4、xpath断言

4、Jmeter关联

4.1、正则表达式提取器

4.1.1、查看正则表达式提取器中的变量

4.2、XPath提取器

4.3、JSON提取器

5、跨线程组传参-BeanShell取样器

​ 6、JMeter录制脚本     


1、cookie管理器

        cookie管理器专门用来管理客户端的cookie信息,一般用于需要登录的场景保持与服务器的会话,如果不设置cookie管理器,则无法在jmeter中保持会话。

        添加方式:线程组--》添加--》配置元件--》cookie管理器,cookie管理器一般不需要专门设置,添加了就可以了

以mms医药管理系统为例子:

        登录之后,服务器给浏览器发送了一个cookie,后续的接口在发送请求时需要携带这个cookie,如果你没有携带这个cookie,那么服务器就认为你没登录,把你重定向到登录界面

登录接口:

        请求方法:post

        请求urlhttp://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数据文件设置

思考:性能测试时,有多个用户登录,登录后循环添加商品,每次添加的商品参数不能相同,该怎么做?练习

请求:https://wwws.baidu.com

要求:循环请求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、设置浏览器代理

点击浏览器设置--》输入框搜索代理---》打开您的计算机代理设置--》搜索设置代理

此时刷新要录制网站,可以查看到线程组下面有了请求  

猜你喜欢

转载自blog.csdn.net/xiatian22/article/details/129874889
今日推荐