当前位置: 首页 > article >正文

JMeter 接口关联方法及示例

JMeter 接口关联方法及示例

在 JMeter 中进行接口测试时,接口关联是非常重要的操作,它可以确保多个接口之间的数据传递和业务逻辑的连贯性。除了正则表达式提取器,还有多种方法可以实现接口关联,下面将详细介绍这些方法并给出实际例子,同时也会介绍使用用户自定义变量进行接口关联的例子。

一、JSON 提取器

适用场景

当接口响应数据为标准的 JSON 格式时,使用 JSON 提取器可以方便、准确地提取所需的数据。

示例

假设我们有一个用户信息查询接口,响应数据如下:

{
    "user": {
        "id": 123,
        "name": "John Doe",
        "email": "johndoe@example.com"
    }
}

我们需要提取用户的 id 用于后续的订单查询接口。

配置步骤

  1. 在用户信息查询接口下添加“后置处理器” -> “JSON 提取器”。
  2. 配置 JSON 提取器:
    • 名称:设置为 userId
    • JSON 路径表达式:填写 $.user.id
    • 匹配数字:设置为 1
    • 缺省值:可以留空。

使用示例

在后续的订单查询接口中,将 userId 作为参数传递:

  • 请求路径/orders?userId=${userId}

二、XPath 提取器

适用场景

当接口响应数据是 XML 格式时,XPath 提取器可以根据 XPath 表达式从 XML 文档中提取特定的节点值。

示例

假设我们有一个商品列表接口,响应数据如下:

<products>
    <product>
        <id>456</id>
        <name>Smartphone</name>
        <price>999</price>
    </product>
</products>

我们需要提取商品的 id 用于后续的商品详情查询接口。

配置步骤

  1. 在商品列表接口下添加“后置处理器” -> “XPath 提取器”。
  2. 配置 XPath 提取器:
    • 名称:设置为 productId
    • XPath 查询:填写 //product/id
    • 结果类型:选择 STRING
    • 匹配数字:设置为 1
    • 缺省值:可以留空。

使用示例

在后续的商品详情查询接口中,将 productId 作为参数传递:

  • 请求路径/products/${productId}

三、CSS/JQuery 提取器

适用场景

当接口响应为 HTML 页面,需要从 HTML 元素中提取数据时,CSS/JQuery 提取器可以使用 CSS 选择器或 JQuery 语法定位元素并提取数据。

示例

假设我们有一个新闻列表页面,HTML 代码如下:

<!DOCTYPE html>
<html>
<body>
    <h1 class="news-title">Breaking News: New Policy Announced</h1>
</body>
</html>

我们需要提取新闻标题用于后续的分享接口。

配置步骤

  1. 在新闻列表接口下添加“后置处理器” -> “CSS/JQuery 提取器”。
  2. 配置 CSS/JQuery 提取器:
    • 引用名称:设置为 newsTitle
    • CSS/JQuery 表达式:填写 .news-title
    • Attribute:留空,表示提取元素的文本内容。
    • 匹配数字:设置为 1
    • 缺省值:可以留空。

使用示例

在后续的分享接口中,将 newsTitle 作为参数传递:

  • 请求参数title=${newsTitle}

四、BeanShell 后置处理器

适用场景

对于复杂的数据处理和关联逻辑,正则表达式、JSON 提取器等可能无法满足需求,此时可以使用 BeanShell 后置处理器,通过编写 Java 代码进行灵活的数据提取和处理。

示例

假设我们有一个订单接口,响应数据如下:

{
    "order": {
        "id": 789,
        "totalAmount": 199.99,
        "items": [
            {
                "name": "Laptop",
                "price": 149.99
            },
            {
                "name": "Mouse",
                "price": 49.99
            }
        ]
    }
}

我们需要提取订单中第一个商品的名称用于后续的评价接口。

配置步骤

  1. 在订单接口下添加“后置处理器” -> “BeanShell 后置处理器”。
  2. 在 BeanShell 后置处理器的“脚本”框中编写以下代码:
import org.json.JSONObject;
import org.json.JSONArray;

String response = prev.getResponseDataAsString();
JSONObject json = new JSONObject(response);
JSONObject order = json.getJSONObject("order");
JSONArray items = order.getJSONArray("items");
JSONObject firstItem = items.getJSONObject(0);
String itemName = firstItem.getString("name");
vars.put("firstItemName", itemName);

使用示例

在后续的评价接口中,将 firstItemName 作为参数传递:

  • 请求参数productName=${firstItemName}

五、JSR223 后置处理器

适用场景

JSR223 后置处理器与 BeanShell 后置处理器类似,但支持多种脚本语言,如 Groovy、JavaScript 等,在性能和功能上更具优势。

示例

同样使用上述订单接口的响应数据,我们使用 Groovy 脚本提取订单的总金额用于后续的支付接口。

配置步骤

  1. 在订单接口下添加“后置处理器” -> “JSR223 后置处理器”。
  2. 在 JSR223 后置处理器的“语言”下拉框中选择 Groovy
  3. 在“脚本”框中编写以下代码:
import groovy.json.JsonSlurper

def response = prev.getResponseDataAsString()
def json = new JsonSlurper().parseText(response)
def totalAmount = json.order.totalAmount
vars.put("orderTotalAmount", totalAmount.toString())

使用示例

在后续的支付接口中,将 orderTotalAmount 作为参数传递:

  • 请求参数amount=${orderTotalAmount}

六、用户自定义变量进行接口关联

适用场景

在某些情况下,我们可能需要手动设置一些变量,并在多个接口中使用这些变量进行关联。

示例

假设我们要测试一个用户注册和登录的流程,需要手动设置用户名和密码,然后在注册和登录接口中使用这些信息。

配置步骤

  1. 在测试计划中添加“配置元件” -> “用户定义的变量”。
  2. 配置用户定义的变量:
    • 名称:分别设置为 usernamepassword
    • :填写具体的用户名和密码,例如 testusertestpassword

使用示例

  • 注册接口
    • 请求参数username=${username}&password=${password}
  • 登录接口
    • 请求参数username=${username}&password=${password}

通过以上这些方法,我们可以在 JMeter 中灵活地实现接口关联,确保测试用例能够准确地模拟真实的业务场景。


http://www.kler.cn/a/568986.html

相关文章:

  • 《向量数据库》揭秘:大模型时代的记忆双引擎架构与工程实践
  • 火山引擎AI一体机-DeepSeek版来了
  • 蜂鸣器使用
  • 聊一聊 IM 如何优化监控
  • 上海市计算机学会竞赛平台2024年5月月赛丙组城市距离之和
  • STM32 USB外设全面解析:从模式选择到实战避坑指南
  • txt 转 json 使用python语言
  • TypeScript 类型声明
  • 【Python机器学习】1.1. 机器学习(Machine Learning)介绍
  • LeetCodeHot100_0x03
  • 分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机多特征分类预测
  • 商城系统单商户开源版源码
  • tableau之标靶图、甘特图和瀑布图
  • 计算机毕业设计SpringBoot+Vue.js校园失物招领系统(源码+文档+PPT+讲解)
  • 开源电商项目、物联网项目、销售系统项目和社区团购项目
  • 牛客刷题自留-深度学习
  • 云原生网络篇——万级节点服务网格与智能流量治理
  • Vue 系列之:基础知识
  • 重构MVC
  • 一次连接,可能会多次创建socket???