JMeter 接口关联方法及示例

news/2025/3/3 14:05:25/

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.JsonSlurperdef 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.ppmy.cn/news/1576305.html

相关文章

李宏毅机器学习课程学习笔记04 | 浅谈机器学习-宝可梦、数码宝贝分类器

文章目录 案例&#xff1a;宝可梦、数码宝贝分类器第一步&#xff1a;需要定义一个含有未知数的function第二步&#xff1a;loss of a function如何Sample Training Examples > 如何抽样可以得到一个较好的结果如何权衡模型的复杂程度 Tradeoff of Model Complexity todo 这…

Visual Studio Code (VSCode) 使用 GDB 进行调试

在 Visual Studio Code (VSCode) 中使用 GDB 进行调试&#xff0c;通常用于调试 C/C 程序。以下是配置和使用 GDB 调试的步骤&#xff1a; 1. 安装必要工具 确保已安装以下工具&#xff1a; GCC/G&#xff1a;用于编译 C/C 代码。GDB&#xff1a;GNU 调试器。VSCode&#xf…

哈工大 计算机组成原理 第四章 存储器(上)笔记

4.1概述 A 一、存储器概述 1. 存储器的重要性 ‌定义‌&#xff1a;存储器是计算机系统中最重要的部件之一&#xff0c;负责存储指令和数据。‌功能‌&#xff1a;执行程序时所需的指令和数据来自存储器&#xff0c;程序的执行结果也保存在存储器中。‌应用‌&#xff1a;存…

创建一个简单的spring boot+vue前后端分离项目

一、环境准备 此次实验需要的环境&#xff1a; jdk、maven、nvm和node.js 开发工具&#xff1a;idea或者Spring Tool Suite 4&#xff0c;前端可使用HBuilder X&#xff0c;数据库Mysql 下面提供maven安装与配置步骤和nvm安装与配置步骤&#xff1a; 1、maven安装与配置 1…

​VS Code Go 开发配置

0.vscode安装 已安装 1.安装插件 安装第一个 2.构建第一个Go程序 https://www.youtube.com/watch?v1MXIGYrMk80 2.1新建一个文件夹 使用vscode打开 2.2打开终端新建一个模块 后面的地址,可以随意填写,不连接真实网站 go mod init demo/demo.com 2.3新建.go文件 在go.mo…

迷你世界脚本游戏接口:Game

游戏接口&#xff1a;Game 彼得兔 更新时间: 2024-05-07 15:52:59 具体函数名及描述如下: 序号 函数名 函数描述 1 doGameEnd(...) 游戏结束 2 dispatchEvent(...) 派发自定义事件 3 getDefString(...) 获取默认字符串 4 setScriptVar(...) 设置…

使用 Kubeflow 和 Ray 构建机器学习平台

使用 Kubeflow 和 Ray 构建一个稳健的 ML 平台。我们将深入讨论 Kubeflow 和 Ray 的独特功能,以及它们如何互补,共同创建一个强大的 ML 生态系统 集中化 ML 平台的需求 随着企业在 ML 旅程中的成熟,初始 ML 项目的临时性质逐渐让位于对更结构化和可扩展方法的需求。集中化…

202年充电计划——自学手册 网络安全(黑客技术)

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“…