使用 Apache JMeter 中的正则表达式提取器进行关联

如果需要从文本响应中提取信息,最简单的方法是使用正则表达式。匹配模式与 Perl 中使用的模式非常相似。我们假设我们要测试机票购买工作流程。第一步是提交购买操作。下一步是确保我们能够使用购买 ID 验证所有细节,购买 ID 应该在第一个请求时返回。让我们假设第一个请求返回一个 html 页面,其中包含我们需要提取的此类 ID:

<div class="container">
  <div class="container hero-unit">
    <h1>Thank you for you purchse today!</h1>
       <table class="table">
           <tr>
             <td>Id</td>
             <td>Your purchase id is 1484697832391</td>
           </tr>
           <tr>
             <td>Status</td>
             <td>Pending</td>
           </tr>
           <tr>
             <td>Amount</td>
             <td>120 USD</td>
            </tr>
         </table>
    </div>
</div>

这种情况是使用 JMeter 正则表达式提取器的最佳候选者。正则表达式是用于描述搜索模式的特殊文本字符串。有许多在线资源可以帮助编写和测试正则表达式。其中一个是 https://regex101.com/

StackOverflow 文档

要使用此组件,请打开 JMeter 菜单,然后: 添加 - >后处理器 - >正则表达式提取器

StackOverflow 文档

正则表达式提取器包含以下字段:

  • 引用名称 - 提取后可以使用的变量的名称
  • 正则表达式 - 表示将在文本中搜索的字符串(模式)的符号和字符序列
  • 模板 - 包含对组的引用。由于正则表达式可能包含多个组,因此它允许通过将组编号指定为$ 1 $或$ 2 $或$ 1 $$ 2 $(提取两个组)来指定要提取的组值
  • 匹配号 - 指定将使用哪个匹配(0 值匹配随机值/任何正数 N 表示选择第 N 个匹配/负值需要与 ForEach 控制器一起使用)
  • 默认值 - 如果未找到匹配项,将存储在变量中的默认值存储在变量中。

应用于复选框处理发出嵌入资源请求的示例。此参数定义正则表达式是应用于主样本结果还是应用于所有请求,包括嵌入资源。这个参数有几种选择:

  • 主要样本和子样本
  • 仅限主要样本
  • 仅限子样本
  • JMeter 变量 - 断言应用于命名变量的内容,可以由另一个请求填充

要检查的字段复选框允许选择应用正则表达式的字段。几乎所有参数都是自描述的:

  • 正文 - 响应的主体,例如网页的内容(不包括标题)
  • 正文(未转义) - 响应的正文,替换了所有 HTML 转义码。请注意,处理 HTML 转义时不考虑上下文,因此可能会进行一些不正确的替换(*此选项会严重影响性能)
  • Body - Body 作为文档 - 通过 Apache Tika 从各种类型的文档中提取文本(*也可能影响性能)
  • 正文 - 请求标头 - 非 HTTP 样本可能不存在
  • 正文 - 响应标头 - 非 HTTP 样本可能不存在
  • 正文 - 网址
  • 响应代码 - 例如 200
  • 身体 - 响应消息 - 例如 OK

提取表达式后,可以使用$ {purchaseId}变量将其用于后续请求。

StackOverflow 文档

该表包含 JMeter 正则表达式支持的所有收缩:

StackOverflow 文档 StackOverflow 文档