JMeter中如何实现接口之间的关联?

关联是Jmeter工具中非常重要的一个技术。因为在测试过程过有些数据是经常发生变化的,要获取并使用这些数据,就要使用关联。

具体方法:

一、正则表达式提取器

在默认的测试计划中添加一个线程组,然后添加取样器。

 

 右键添加后置处理器→正则表达式提取器,正则表达式提取器界面如下:

 

  • 说明:

后置处理器:在请求结束或者返回响应结果时发挥作用

正则表达式提取器:允许用户从服务器的响应中通过使用perl的正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的变量名中。

  • APPly to:作用范围(返回内容的断言范围)

Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器

Main sample only:仅作用于父节点的取样器

Sub-samples only:仅作用于子节点的取样器

JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)

  • 要检查的响应字段:需要检查的响应报文的范围

主体:响应报文的主体

Body(unescaped):主体,响应的主体内容且替换了所有的html转义符,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用

Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能

Response Headers:响应信息头

Request Headers:请求信息头

URL:统一资源定位符,即Internet上用来描述信息资源的字符串

响应代码:响应状态码,比如200、404等

响应信息:响应信息

  • 引用名称(Reference Name):Jmeter变量的名称,存储提取的结果;即下个请求需要引用的值、字段、变量名(例子中我提取的是SOCIAL_NO)
  • 正则表达式(Regular Expression):使用正则表达式解析响应结果,“()”表示提取字符串中的部分值,请不要使用“||”,除非你本身需要匹配这个字符。

常用的正则表达式操作符:

 

  • 模板:代表从正则表达式结果引用的样式,其实结果是一组,而不是一个。$0$代表这一组结果的全部,$1$代表这一组结果的第1个,以此类推;$1$$2$代表该正则表达式一组结果中的第1个和第2个,俩结果挨在一起中间没有间隔;$3$,$4$代表该正则表达式一组结果中的第3个和第4个,俩结果间有一个逗号相连。
  • 匹配数字:0代表正则表达式结果组中随机,1代表全部。
  • 缺省值:当引用不对时显示传递的信息,通畅写一个ERROR。

最后,根据上面的说明,完成配置,然后可以先添加一个监视器(查看结果树),检查是否取到了对应的值;提取到的参数,调用时用${sessionid_1},${sessionid_2}...,如果想要得到匹配出的参数的个数,${sessionid_matchNr}。

二、json path postprocessor(JSON Extractor)

用处:

当前接口响应返回的json中提取内容,作为变量可以在不同的请求中传递。如下,从登陆接口返回的json中提取user id,变量名设置为id,在其他请求中可以直接调用这个变量,或者作为post参数。次插件对于restful接口非常好用。

  • Variable names : 名称
  • JSONPath Expression:JSON表达式
  • Match Numbers:匹配哪个,可为空即默认第一个
  • Default Value:未取到值的时候默认值

比如返回值如下:

{
    "userSession": {
        "businessCode": "900000",
        "createTime": "2018-05-25 03:24:17",
        "userCode": "29feaa3c98014e02bec16c6f448a6459",
        "userName": "lip-vpn",
        "sessionId": "10a4cee035d044d8b2f25e2cebb2843e"
    }
}
  • 则json表达式为:$.userSession.sessionId

如果返回值是数组,则需要加上数组的位置,如

{
     "userSession": [
         {
             "businessCode": "900000",
             "createTime": "2018-05-25 03:24:17",
             "userCode": "29feaa3c98014e02bec16c6f448a6459",
             "userName": "lip-vpn",
             "sessionId": "10a4cee035d044d8b2f25e2cebb2843e"
         }
    ]
}

则json表达式为:$.userSession[0].sessionId,提取第一个值。


三、XPath Extractor

Jmeter提供的对关联的支持包括以下2个方面:

①能够将返回页面上的指定内容保存在参数中;(即正则表达式提取器和JSON Extractor)

②能够将GET或POST方法中的数据使用该参数来替换;(XPath Extractor)

  • XPath Extractor的使用方法与正则表达式提取器(Regular Expression Extractor)类似,只不过该Expression中指定的不是正则表达式,而是给定的XPath路径。
  • 后置处理器(Post Processor)本质上是一种对sampler发出请求后接受到的响应数据进行处理(后处理)的方法。必须将后置处理器元件放在合适的位置才能达到预期的效果。
  • 新建一个线程组,然后右键-添加-后置处理器-XPath Extractor:

 

  • APPly to:作用范围(返回内容的断言范围)

Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器

Main sample only:仅作用于父节点的取样器

Sub-samples only:仅作用于子节点的取样器

JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称)

  • XML Parsing Options:要解析的XML参数
  • Use Tidy:当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中;
  • Quiet表示只显示需要的HTML页面,Report errors表示显示响应报错,Show warnings表示显示警告;
  • Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨;

Validate XML:根据页面元素模式进行检查解析;

Ignore Whitespace:忽略空白内容;

Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容;

  • Return entire XPath fragment of text content:返回文本内容的整个XPath片段;
  • Reference Name:存放提取出的值的参数。
  • XPath Query:用于提取值的XPath表达式。
  • Default Value:参数的默认值。

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

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

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

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

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

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

<think>嗯,用户问的是JMeter如何做接口之间的数据关联。我需要先回想一下自己对JMeter的了解,尤其是数据关联的部分。数据关联通常指的是在不同接口请求之间传递参数,比如一个接口的响应数据作为后续接口的请求参数。常见的例子是登录后获取token,然后在其他请求中使用这个token。 首先,用户可能需要知道如何从响应中提取数据。JMeter里常用的后置处理器有正则表达式提取器和JSON提取器。我应该分步骤介绍这两种方法,并且给出具体的例子,这样用户更容易理解。 然后,正则表达式提取器适用于各种格式的响应数据,特别是非结构化的文本。要解释怎么配置正则表达式,比如引用名称、正则表达式模板、匹配数字等。同时提醒用户注意正则的写法,可能需要转义字符或者处理多值情况。 接下来,JSON提取器是针对JSON响应的,现在很多API返回JSON,所以这个提取器更方便。需要说明JSONPath的用法,比如$.token这样的表达式,以及默认值等配置项。可能还要提到如果JSON结构复杂的话,怎么处理嵌套的情况。 然后,用户可能想知道提取后的数据如何在后续请求中使用。这里需要说明变量引用的方式,比如${token},并且强调变量作用域的问题,比如在同一个线程组内有效。还要提到调试方法,比如用Debug Sampler或者查看结果树来确认变量是否正确提取。 另外,可能还需要提到其他提取方式,比如XPath提取器用于XML响应,或者BeanShell后置处理器处理更复杂的情况,但简单的情况用正则或JSON提取器就够了。 还要注意用户可能是刚开始接触JMeter,所以步骤要详细,避免使用太专业的术语,必要时给出示例配置。比如,在第一个接口后添加正则表达式提取器,配置好变量名和正则式,然后在第二个接口的参数中用${变量名}引用。 最后,可能存在的常见问题,比如变量未提取到、作用域问题、或者特殊字符处理,可以简要提醒用户注意这些点,并建议使用调试工具来验证。 总结一下,回答的结构应该是先介绍数据关联的概念和常见场景,然后分步骤讲解两种主要的提取方法,每种方法的具体配置和示例,接着说明如何在后续请求中使用变量,最后补充其他方法和常见问题。这样用户能够一步步跟着操作,解决问题。</think>JMeter接口数据关联可通过**提取响应数据**并**参数化传递**实现。以下是具体步骤: --- ### 一、数据关联核心原理 **核心逻辑**:从第一个接口响应中提取数据 → 存储为变量 → 后续接口通过变量名引用 --- ### 二、常用数据提取方法 #### 方法1:正则表达式提取器(适用任意格式) 1. **添加位置**:右键点击第一个接口 → 添加 → 后置处理器 → 正则表达式提取器 2. **关键配置**: - 引用名称:`变量名`(如 `token`) - 正则表达式:`"access_token":"(.*?)"`(匹配双引号中的值) - 模板:`$1$`(表示取第一个捕获组) - 匹配数字:`1`(取第一个匹配结果) $$ \text{示例:若响应为} \{"access_token":"abc123"\} \Rightarrow \text{提取到} token=abc123 $$ #### 方法2:JSON提取器(适用JSON格式) 1. **添加位置**:右键点击第一个接口 → 添加 → 后置处理器 → JSON提取器 2. **关键配置**: - 变量名称:`token` - JSON Path表达式:`$.access_token` - 默认值:`NOT_FOUND`(提取失败时返回的值) --- ### 三、参数传递使用 在后续接口的请求参数中,通过`${变量名}`引用: ```http GET /api/userInfo Header: Authorization: Bearer ${token} Body: {"orderId":"${orderId}"} ``` --- ### 四、调试验证方法 1. **查看结果树**:检查提取的变量值是否显示在`Response data`中 2. **Debug Sampler**:添加调试取样器查看所有变量值 3. **日志输出**:通过`${__log(${token})}`在日志中打印变量 --- ### 五、典型场景案例 **场景:登录获取token后查询用户信息** 1. 登录接口 `/login` → 提取响应中的 `token` 2. 用户信息接口 `/user` → Header携带 `Authorization: Bearer ${token}` --- ### 六、注意事项 1. **变量作用域**:同一线程组内变量全局有效 2. **数据清洗**:若响应含特殊字符,可用`${__urlencode(${rawData})}`处理 3. **关联时序**:确保提取器位于目标请求的子层级 通过上述方法,可实现接口间的动态数据传递,满足身份验证、流程串联等测试需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值