【测试工具JMeter篇】JMeter性能测试入门级教程(八):JMeter参数关联

JMeter参数关联,就是请求或者线程之间通过传递参数建立联系。一般,我们将一个请求的响应参数,作为另一个请求的入参。比如登录后的操作,第一步用来实现登录操作,然后将请求返回的token提取出来保存到某一个变量当中,后续请求作为入参使用。

一、通过正则表达式提取器实现参数关联

jmeter通过正则表达式提取器来实现这一场景。

1.1 正则表达式提取器添加方式

1.2 实现案例

**场景:**有如下两个接口,通过正则表达式提取器,将第一个接口的城市代码,作为第二个请求的参数传入。

获取城市代码接口:

http://toy1.weather.com.cn/search?cityname=nanjing

根据城市代码获取天气接口:

http://www.weather.com.cn/data/cityinfo/101190101.html

操作步骤

1)建立http请求,获取南京的城市代码,添加察看结果树。

2)运行后,在响应数据中复制目标参数及前后的字符,尽量保证复制的字符串具有唯一性。

3)添加正则表达式提取器,填写提取器相关参数。

4)添加获取城市天气请求,添加察看结果树,使用${citycode}替换101190101。

使用${xx}引用上述正则提取的参数。

5)响应结果如下

提取器参数解释

  • **引用名称:**提取的参数名称,自定义,后续请求引用时使用。
  • **正则表达式:**获取响应结果的正则公式,常用(.+?)和(.*?),两者结果一致。
  • 具体字符含义如下:
  • 模板:-1全部,0 随机,对应上述正则表达式,若只有一个正则一般就填写1。
  • **匹配数字:**匹配结果作为一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,其他整数表示对应第几个值。
  • **缺省值:**匹配失败时取的默认值。

小技巧

可以在线程组中添加调试取样器,通过取样器获取的请求返回值可以查看所有正则参数的取值。

常见的正则表达式操作符

二、通过JSON提取器实现参数关联

2.1 JSON提取器介绍

相信做过自动化测试的朋友经常会遇到这样的场景:我想调用系统中的某个业务接口,但是需要先登录系统。也就是现在很多接口的访问,都是需要登录接口的token做为基础。

在JMeter中先访问登录接口,使用后置处理器提取出来token或者Cookie的值,然后将该值带到后续的业务接口中,这时就会用到JSON提取器组件。

2.2 为什么要用 JSON 提取器

  • JSON是目前大多数接口响应内容的数据格式。
  • 在接口测试中,不同接口之间可能会有数据依赖,在JMeter中可以通过后置处理器来提取接口的响应内容。
  • JSON 提取器是其中一个可以用来提取响应内容的元件。

2.3 JSON提取器界面详解

添加JSON提取器组件操作:选中"取样器"右键 ---> 添加 ---> 后置处理器 ---> JSON提取器。

界面如下图所示:

下面是JSON提取器组件的详细说明:

  • 名称:JSON提取器组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该JSON提取器组件的简短说明,以便后期回顾时查看。

(1)Apply to:作用范围(返回内容的取值范围)

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器。
  • Main sample only:仅作用于父节点的取样器。(选默认的 main sample only 就行了)
  • Sub-samples only:仅作用于子节点的取样器。
  • JMeter Variable Name to use:作用于JMeter变量(输入框内可输入JMeter的变量名称),从指定变量中提取需要的值。

(2)第二部分内容

  • Names of created variables:定义引用提取值的变量名,后面接口中使用${变量名}引用,必填项。
  • JSON Path expression:填写JSON Path表达式,用来提取某个值。必填项。
  • Match No.(0 for Random):表示取值是第几个匹配结果,因为有可能XPath表达式会匹配到多个值。0表示随机,-1表示全部,1代表第一个,2代表第二个,以此类推。(非必填项)
  • Compute concatenation var(suffix_ALL):勾选此项后,如果匹配到多个结果,JMeter会使用,将他们连接起来,存储在的变量中,会自动命名为_ALL。
  • Default Values:缺省值,如果JSON Path表达式匹配不到值的时候,将使用该默认值。(非必填项)

2.4 JSON提取器的使用

需求:用户登录系统,并在系统中查询个人信息。

实现思路:

  • 登陆系统,记录Cookie信息。
  • 提取出用户的ID信息。
  • 保持登陆的状态,根据用户ID,查询用户信息。

(1)测试计划内包含的元件

添加元件操作步骤:

  • 创建测试计划。
  • 创建线程组:选中"测试计划"右键 ---> 添加 ---> 线程(用户) ---> 线程组。
  • 在线程组里面,添加配置原件"HTTP Cookie管理器"组件:选中"线程组"右键 ---> 添加 ---> 配置元件 ---> HTTP
    Cookie管理器。
  • 在线程组下,添加取样器"HTTP请求"组件:选中"线程组"右键 ---> 添加 ---> 取样器 ---> HTTP请求。
  • 在取样器下,添加后置处理器"JSON提取器"组件:选中"取样器"右键 ---> 添加 ---> 后置处理器 ---> JSON提取器。
  • 在线程组下,添加监听器"察看结果树"组件:选中"线程组"右键 ---> 添加 ---> 监听器 ---> 察看结果树。

提示:需要重复添加的组件这里不重复描述。

最终测试计划中的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(2)HTTP Cookie管理器内容

什么都不用填写,保持原样即可。

简单说明一下:

  • JMeter中自动收集的Cookie,是不会在HTTP Cookie管理器中进行展示的,但是运行后通过查看结果树可以查看到Cookie信息,接受到的Cookie会被自动存储在线程变量中。(使用Debug Sampler组件查看)
  • HTTP Cookie管理器会自动记录每一个请求所产生的Cookie,在后边对同源站点进行的请求中,都可以自动的使用对应Cookie进行发送。

(3)用户登陆请求界面内容

发送一个标准POST请求,参数格式为JSON,这里就不做解释了。

界面内容如下图所示:

(4)JSON提取器界面内容

我们在编辑JSON提取器组件之前,一般先请求一下需要提取返回数据的接口。

因为我们需要先查看一下需要提取的数据在什么位置,同时我们也能够提前编写一下JSON Path表达式。

如下图所示:

然后选择JSON Path Tester视图模式,先手动编写JSON Path表达式,看看是否能够取到需要的数据。

如下图所示:

之后我们就可以编写JSON提取器组件界面了,如下:

编写引用名称、JSON表达式、匹配数据选择,如下图:

提示:如果要获取多个元素,则可以在HTTP请求组件中,加入多个后置处理器来提取需要的值。即:每一个后置处理器只能获取一个值。

JSON提取器组件提取出来的数据,会存储在线程变量中,供其他后续接口使用。

(5)查看用户信息请求页面内容

填写接口的基本请求信息,然后把JSON提取器提取出来的数据,作为参数化变量应用到请求中。

如下图所示:

(6)查看结果

我们可以看到在第二个请求中,拿到了第一个请求提取出来的用户ID数据。

如下图所示:

再来看看第二个请求响应的结果,可以看到对应用户的信息我们已经查询到了。

提示:可以添加Debug PostProcessor(调试后置处理器),或者Debug Sampler(调试取样器),来查看JSON提取器中,提取出的内容是否正确。

注意:正常跑用例时删除或禁用它们。

2.5 JSON Path表达式说明

JSON提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值为一个List,则使用.key[n],其中n为list中元素的编号。

常用JSON Path表达式使用实例,如下:

1、获取第一层中的某个属性的值:$.key。

2、获取List中某个key的value值:$.result[0].name。

3、获取列表中的某个列表的属性值:$.result[1].approver[0]。

4、获取一个列表下全部的某一个元素:$.result[*].name。

5、获取N个值:

  • 取前两条数据:$.result.records[2].id。
  • 取后两条数据:$.result.records[-2].id。

6、提取特定条件的某个值:$.result.records[?(@.object_id==0)].id。

7、获取固定条件下的多个key的value值:$.result.records[?(@.object_id==0)].["id","name","is_active"]。

三、通过Xpath提取器实现参数关联

1.1 XPath Extractor介绍

XPath Extractor的使用方法与正则表达式提取器(Regular Expression Extractor)类似,只不过该Expression中指定的不是正则表达式,而是给定的XPath路径。

后置处理器(Post Processor)本质上是一种对sampler发出请求后接受到的响应数据进行处理(后处理)的方法。必须将后置处理器元件放在合适的位置才能达到预期的效果。

1.2 XPath提取器界面详解

新建一个线程组,然后右键-添加-后置处理器-XPath Extractor:

(1)Apply to:作用范围(返回内容的取值范围)

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
  • Main sample only:仅作用于父节点的取样器
  • Sub-samples only:仅作用于子节点的取样器
  • JMeter Variable Name to use:作用于jmeter变量(输入框内可输入jmeter的变量名称)

(2)XML Parsing Options:要解析的XML参数

  • Use Tidy(tolerant parser):当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中;
  • Quiet表示只显示需要的HTML页面
  • Report errors表示显示响应报错
  • Show warnings表示显示警告;
  • Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨;
  • Validate XML:根据页面元素模式进行检查解析;
  • Ignore Whitespace:忽略空白内容;
  • Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容;

(3)Return entire XPath fragment of text content:返回文本内容的整个XPath片段

(4)Reference Name:存放提取出的值的参数。

(5)XPath Query:用于提取值的XPath表达式。

(6)Default Value:参数的默认值。

1.3 正则表达式提取器和XPath Extractor的区别

①正则表达式提取器可以用于对页面任何文本的提取,提取的内容是根据正则表达式在页面内容中进行文本匹配;

②XPath Extractor则可以提取返回页面任意元素的任意属性;

③如果需要提取的文本是页面上某元素的属性值,建议使用XPath Extractor;

④如果需要提取的文本在页面上的位置不固定,或者不是元素的属性,建议使用正则表达式提取器。

1.4 示例实战

1)场景:

访问网易官网,获取title值。

将title值放入百度搜索框,进行搜索。

2)添加元件操作

最终测试计划添加完元件后界面如下:

3)具体元件配置

非常简单的http请求配置,界面内容如下图所示:

  • 网易首页请求设置
  • Xpath提取器配置

我们在编辑Xpath提取器组件前,一般先运行上一个请求需要提取返回数据的接口。

因为我们需要先查看一下需要提取的数据在什么位置,如下图所示:

然后选择Xpath Tester视图模式,先手动编写Xpath表达式,看看是否能够取到需要的数据。如下图所示:

  • 百度搜索页面设置如下

4)运行结果

我们可以看到第二个请求中,拿到了第一个请求提取出来的数据"网易"。如下图所示:

再来看看第二个请求响应的结果,可以看到有"网易_百度搜索"的title属性,说明在百度已经进行了网易搜索。如下图所示:

相关推荐
海姐软件测试6 小时前
Postman参数化设置如何设置?
开发语言·jmeter
lifewange15 小时前
Jmeter面试题
jmeter
一棵树长得超出它自己15 小时前
jmeter if控制器在loop控制器执行结束后执行
前端·jmeter
niuniu_66615 小时前
Selenium 性能测试指南
selenium·测试工具·单元测试·测试·安全性测试
莓事哒15 小时前
selenium和pytessarct提取古诗文网的验证码(python爬虫)
爬虫·python·selenium·测试工具·pycharm
软件测试曦曦18 小时前
如何使用Python自动化测试工具Selenium进行网页自动化?
自动化测试·软件测试·python·功能测试·测试工具·程序人生·自动化
互联网杂货铺20 小时前
黑盒测试、白盒测试、集成测试和系统测试的区别与联系
自动化测试·软件测试·python·功能测试·测试工具·单元测试·集成测试
Feng.Lee1 天前
聊一聊缓存如何进行测试
功能测试·测试工具·缓存
爱学测试的雨果1 天前
Postman —— postman实现参数化
软件测试·功能测试·测试工具·lua·postman
互联网杂货铺1 天前
如何用Postman实现自动化测试?
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman