使用 Postman 从 HTML 响应中提取特定值:正则表达式方法

使用 Postman 从 HTML 响应中提取特定值:正则表达式方法

本文档旨在指导 postman 用户如何从 html 响应中提取特定的变量值,例如 JavaScript 代码中的 authorizationCode。我们将使用正则表达式来匹配和提取目标值,并将其保存为 Postman 变量,以便在后续请求中使用。

从 HTML 响应中提取数据

在 Web API 测试中,有时服务器会返回 HTML 格式的响应。我们需要从这些 HTML 响应中提取特定的数据,例如动态生成的 Token 或 ID。Postman 提供了强大的脚本功能,可以帮助我们实现这个目标。

一种常见的方法是使用 Cheerio 库解析 HTML,然后使用 css 选择器查找目标元素。然而,当目标数据隐藏在 JavaScript 代码中时,正则表达式可能是一种更直接有效的选择。

使用正则表达式提取 authorizationCode

假设我们收到如下的 HTML 响应:

立即学习前端免费学习笔记(深入)”;

<html> <head> </head> <body>     <script>         function onClickButton(word) {         if (word == 'yes'){           var authorizationCode = '360ad5ce-ecfe-4ad4-83d1-9254e89a3ccc';           var state = 'c8271b81-4229-6a1f-bf9c-758f11c1f5b1';         } else {           alert(word);         }       }     </script>     <div class="shb-psua-sign-app-sandbox-container">     </div> </body> </html>

我们的目标是从 <script> 标签中提取 authorizationCode 的值。由于 authorizationCode 的值是一个 GUID (Globally Unique Identifier),我们可以使用正则表达式来匹配它。</script>

在 Postman 的 “Tests” 标签中,添加以下脚本:

pm.test("提取 authorizationCode", function () {     var Regex = new regexp('({){0,1}[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}(}){0,1}');     var match = regEx.exec(pm.response.text());      if (match) {         pm.CollectionVariables.set("authorizationCode", match[0]);         console.log("authorizationCode: " + pm.collectionVariables.get("authorizationCode"));     } else {         pm.expect.fail("未找到 authorizationCode");     } });

代码解释:

  1. pm.test(“提取 authorizationCode”, function () { … });: 这是一个 Postman 测试块,用于执行测试逻辑。
  2. var regEx = new RegExp(‘({){0,1}[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}(}){0,1}’);: 定义一个正则表达式,用于匹配 GUID 格式的字符串。 [0-9a-fA-F] 匹配任何十六进制字符,{8}, {4}, {12} 指定了字符出现的次数,- 匹配连字符,({){0,1}和(}){0,1} 匹配可选的花括号。
  3. var match = regEx.exec(pm.response.text());: 使用正则表达式在响应文本中查找匹配项。pm.response.text() 获取响应的 HTML 内容。regEx.exec() 返回一个数组,其中第一个元素是匹配的字符串,如果未找到匹配项,则返回 NULL
  4. if (match) { … } else { … }: 检查是否找到了匹配项。
  5. pm.collectionVariables.set(“authorizationCode”, match[0]);: 如果找到了匹配项,则将匹配的字符串(即 authorizationCode 的值)保存到名为 authorizationCode 的 collection 变量中。 match[0] 包含完整的匹配字符串。
  6. console.log(“authorizationCode: ” + pm.collectionVariables.get(“authorizationCode”));: 在 Postman 控制台中打印 authorizationCode 的值,方便调试。
  7. pm.expect.fail(“未找到 authorizationCode”);: 如果未找到匹配项,则使测试失败,并显示错误消息 “未找到 authorizationCode”。

注意事项:

  • 确保正则表达式能够准确匹配目标值,避免提取到错误的数据。
  • 如果 HTML 结构复杂,可能需要调整正则表达式或使用其他方法(例如 Cheerio)来提取数据。
  • 可以使用 pm.environment.set() 将提取的值保存为环境变量,以便在不同的 collection 之间共享。
  • 正则表达式的性能可能受到 HTML 响应大小的影响,对于大型 HTML 响应,建议考虑使用更高效的解析方法。

总结

本文介绍了如何使用正则表达式从 Postman 的 HTML 响应中提取特定的变量值,并将其保存为 collection 变量。 这种方法适用于从 JavaScript 代码或其他文本内容中提取已知格式的数据。 通过灵活运用正则表达式,可以有效地处理各种复杂的 HTML 响应,从而实现自动化 API 测试的目标。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享