背景介绍

  • 在接口测试中,接口关联是一个很重要的概念。当一个接口的请求参数依赖于另一个接口的响应结果时,就需要进行接口关联。Postman是一款强大的接口测试工具,正则表达式提取器是其中用于提取响应数据的有效工具,通过它可以方便地实现接口关联。

1. 理解接口关联与需求场景

当我们进行接口测试时,常常会遇到后续接口的请求参数依赖于前面接口的返回结果的情况,这就需要进行接口关联。而如果返回的数据是 JSON 格式,我们可以利用正则表达式来提取特定的值用于后续接口的参数设置。非贪婪匹配则是尽可能少地匹配字符,符合我们精准提取目标数据的需求。

2. 发送初始接口请求

首先,在 Postman 中正常发送第一个接口请求,确保该接口能正确返回包含我们后续要提取数据的 JSON 格式的响应内容。例如,我们有一个获取用户信息的接口,返回的 JSON 数据可能类似如下结构:

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

假设我们后续接口需要用到用户的 id 值,那就需要从这个响应中提取出 id 的具体内容。

3. 设置正则表达式提取器(Tests 脚本中)

在 Postman 中,打开该请求的 Tests 标签页,在这里编写 JavaScript 代码来实现正则表达式提取及相关操作。

以下是使用非贪婪匹配提取 JSON 数据中某个值的一般代码示例(假设提取上述 id 值):

// 定义正则表达式,采用非贪婪匹配模式(使用? 符号)
var regex = /"id":"(.*?)"/;
// 获取响应体数据(假设返回 JSON 格式数据)
var responseBody = pm.response.text();
// 执行正则表达式匹配
var match = responseBody.match(regex);
if (match && match.length > 1) {
    // 将提取到的值设置为环境变量(方便后续接口使用),这里变量名为 user_id
    pm.environment.set("user_id", match[1]);
}

在上述代码中:

  • /"id":"(.*?)"/ 这个正则表达式的含义是:匹配双引号包裹的 "id":" 字符串,然后紧接着使用 (.*?) 去捕获后面直到下一个双引号出现的内容(非贪婪模式,即遇到第一个符合结束条件的就停止匹配),这个捕获的内容就是我们要提取的 id 的值。
  • 通过 pm.response.text() 获取响应体的文本内容,然后用 match 方法进行正则匹配。
  • 如果匹配成功且有捕获组内容(match.length > 1),就将提取到的值通过 pm.environment.set 方法设置为环境变量(这里命名为 user_id,你可以根据实际需求自定义变量名),以便后续接口能够方便地引用这个值作为请求参数等。

4. 在后续接口中使用提取的值

对于依赖前面接口提取值的后续接口,在其请求参数相关位置,可以通过 {{变量名}} 的方式来引用我们刚才设置的环境变量。例如,如果后续接口需要在请求路径或者请求体中传入用户 id,可以这样写(以请求路径为例):

https://example.com/api/user/{{user_id}}

这样,当发送后续接口请求时,就会自动将前面提取到的 id 值替换进去,实现了接口之间基于 JSON 数据提取的关联操作。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐