处理器 JMeter:预处理器和后处理器

⚡ 智能摘要

处理器 JMeter 在执行前后修改采样器请求。预处理器准备请求数据,而后处理器执行其他操作。tracts 值和控制测试流程,实现相关性、动态参数化和可靠的性能测试行为。

  • ⚙️ 核心定义: 处理器在其作用域内修改采样器,可以在请求之前或响应之后执行。
  • 🔍 预处理器角色: 预处理器设置变量,重写 URLs,解析 HTML 链接,并在采样器运行之前应用用户参数。
  • 📤 后处理器角色: 后处理器读取响应,例如trac将 t 动态值转换为变量,并决定是否继续运行测试。
  • 🧩 Extractor 选择: 正则表达式、边界、JSON、CSS/jQuery 和 XPath 示例trac每个 tors 都适合不同的回复格式。
  • 🛑 流量控制: 结果状态操作处理程序在采样器失败时停止一个线程或整个测试。
  • 🧪 应用演练: 六个步骤构建了一个计划,一旦无效路径返回服务器错误,该计划就会自动停止。

处理器 JMeter

处理器 Apache JMeter 是一个测试计划元素,用于修改其作用域内的采样器。它会自动运行,要么在请求离开之前运行,要么在请求离开之前运行。 JMeter 或者在收到响应后立即执行,这使其成为处理动态数据的主要机制。 性能测试.

有两种类型的处理器:

  1. 预处理器
  2. 后处理器

作用域决定了处理器的探测范围。直接放置在……下方的处理器 测试计划 或者说,线程组会影响其下的所有采样器,而嵌套在单个采样器内的处理器仅影响该请求。理解这条规则可以避免本页故障排除部分所述的配置错误。

预处理器

预处理器执行一些操作 before 提出采样器请求。

考虑一个简单的例子:假设你想要 JMeter 通过被测网站进行“爬取”, 解析 链接(检查页面上的所有链接)和 回报 HTML。您可以在创建 HTTP 请求之前向控制器添加一些操作,例如“HTML 链接解析器”。

预处理器

上图显示了位于控制器和传出请求之间的预处理器。由于它首先运行,因此是构建请求数据的正确位置:生成时间戳、从 CSV 列读取值、将会话标识符重写到请求体中。 URL或者为每个虚拟用户分配不同的凭证。

后处理器

后处理器在发出采样器请求后执行一些操作。

考虑一个简单的例子: JMeter 向被测 Web 服务器发送 HTTP 请求(等等 www.google.com)并获取响应。你想要 JMeter 如果服务器响应错误,则停止测试。您可以使用后处理器按如下方式执行上述任务:

后处理器

如第二个图所示,后处理器在采样器完成后读取响应。这也是相关性分析的标准方法。当服务器返回每次运行都会改变的令牌、会话 ID 或订单号时,后处理器会将该值捕获到…… JMeter 变量,以便下一个采样器可以重用它。

预处理器的类型 JMeter

Apache JMeter 它配备了一套精简的预处理器。每个预处理器都以不同的方式准备采样器,因此选择正确的元素可以确保测试计划清晰易读且易于维护。

  • 示例超时: 定义请求的最大持续时间。任何运行时间超过配置值的采样器都将被标记为失败。
  • 用户参数: 为每个虚拟用户分配特定的变量值,以便每个线程发送自己的数据集。
  • HTML链接解析器: 爬取被测页面,解析找到的链接,并将它们传递给以下 HTTP 请求。
  • HTTP URL 重写修饰符: 将会话标识符注入到 URL 适用于以下应用 track 个不使用 cookie 的会话。
  • 正则表达式用户参数: 使用从先前响应中捕获的正则表达式的值填充请求参数。
  • JDBC 预处理器: 在采样器之前运行 SQL 语句,这对于填充或重置数据库记录非常有用。
  • JSR223 预处理器: 执行一个 Groovy or Java 用于任何自定义预处理逻辑的脚本。它取代了旧版的 BeanShell 预处理器,并且在负载下性能显著提升。

💡提示: 建议使用 JSR223 预处理器 Groovy 基于 BeanShell 的语言。 Groovy 脚本经过编译和缓存,因此当数千个线程并行运行时,它们消耗的 CPU 资源要少得多。

后处理器的类型 JMeter

后处理器分为两类:例如trac处理程序从采样器中提取值,并对采样器的结果做出反应。下表将每个元素映射到最适合的响应格式。

后处理器 最适合 典型用途
正则表达式示例trac器 任何文本回复 从 HTML 和纯文本中捕获令牌或 ID
边界trac器 任何文本回复 使用左右边界而不是完整的正则表达式来捕获值
JSON 示例trac器 JSON 响应 在读取 REST 有效负载中的字段期间 API测试
CSS/jQuery 示例trac器 HTML响应 使用 CSS 选择器选择元素
XPath 示例trac器 XML 和 XHTML 响应 浏览结构化文档树
JDBC 后处理器 数据库结果 请求后验证或清理行
JSR223 后处理器 任何回应 自定义脚本解析和断言
结果状态操作处理程序 任何回应 Stop 停止ping 当采样器失败时,线程或整个测试都会失败。

边界trac托尔抵达 JMeter 4.0 版本通常是最快的输入方式,因为它只需要输入值左右两侧的文本。正则表达式 Extrac当响应之间的周围标记发生变化时,tor 仍然是更灵活的选择。

预处理器和后处理器的区别

这两个元素遵循相同的作用域规则,但却解决相反的问题。下面的比较总结了它们之间的区别,然后再给出示例。

参数 预处理器 后处理器
执行时间处理时间 在采样器发送请求之前运行 在采样器收到响应后运行
主要目的 准备和修改请求数据 读取响应数据并做出相应反应
典型元素 用户参数、HTML链接解析器、JSR223预处理器 正则表达式示例tractor,JSON Extractor,结果状态操作处理程序
对流动的影响 无法停止测试,只能修改请求。 可以停止线程或整个测试运行
共同的目标 参数化 相关性和误差处理

实际上,这两者是协同工作的。后置处理器从登录响应中捕获会话令牌,而前置处理器在下一个请求中,在发送调用之前注入该令牌。下面的示例演示了该模式中的后置处理器部分。

后处理器示例

本教程将逐步向您展示如何使用后处理器 JMeter.让我们从简单的测试脚本开始。

  1. JMeter 向被测 Web 服务器发送 HTTP 请求 www.google.com.
  2. JMeter 收到来自 Google 服务器。
  3. 如果服务器响应 一个错误, JMeter 将 停止 考试。
  4. 如果服务器响应 OK (没有错误), JMeter 将 继续 考试。

这里是 路线图 本例中:

后处理器示例

前提:

We 再利用 文章中的步骤 1 和步骤 2 JMeter 性能测试。 如果 JMeter 尚未安装,请按照以下步骤操作 JMeter 安装指南 隐形价值。

步骤1)添加线程组

上点右键 测试计划 并添加一个新的线程组: 添加 -> 主题(用户) -> 线程组

但是在线程组控制面板中,输入线程属性如下:

添加线程组

此设置允许 JMeter 创建信息图 10 用户请求 http://www.google.com 10 倍。

步骤2)添加 JMeter 分子

  • 添加 HTTP 请求默认值
  • 添加 HTTP 请求

我们仍然 JMeter 发送请求 http://www.google.com 至 Google 服务器。

步骤 3)添加后处理器元素

右击 线程组 -> 添加 -> 后处理器 -> 结果状态操作处理程序

结果状态操作处理程序 如果用户请求失败,允许用户停止线程或整个测试。

添加后处理器元素

在结果状态操作处理窗格中,选择 立即停止测试. 如果出现以下情况,此选项将停止测试 JMeter 从服务器响应中获取错误。

添加后处理器元素

步骤 4)配置 HTTP 请求

打开 HTTP 请求面板。输入 “ abc” 到路径字段。

配置 HTTP 请求

当您输入 “ abc” 到路径, JMeter 会创造一个 URL 请求 Google 服务器:http://www.google.com/abc。 URL 不存在 Google 服务器。它是 URL 请求如此 Google 服务器将返回错误。

步骤 5)添加查看结果树

右击 线程组 -> 添加 -> 倾听者 -> 查看结果树

添加查看结果树

步骤 6)运行测试

选择查看结果树,按菜单栏上的运行按钮。您将看到 错误 回复 Google 服务器和测试将停止 没有 完成100个线程。

运行测试

现在回到第 4 步,打开 HTTP 请求窗格,输入“日历”到窗格。这使得 JMeter 创建信息图 URL 请求 https://calendar.google.com/calendar/u/0/r 以及 Google 服务器。这是 正确 URL 请求如此 Google 服务器将返回 OK(无错误)。

运行测试

选择查看结果树,按菜单栏上的运行按钮。您将看到 OK 回复 Google 服务器将持续运行测试,直到所有 100 个线程都完成为止。

运行测试

添加一个 断言 与结果状态操作处理程序一起,检查会更加严格,因为断言可能会使返回 HTTP 200 但提供了错误内容的采样器失败。

故障排除

如果您在运行上述场景时遇到问题……请执行以下操作:

  1. 检查您是否通过代理连接到互联网。如果是,请删除代理。
  2. 打开Jmeter的一个新实例
  3. 打开 处理器测试计划.jmx 在Jmeter中
  4. Double-单击线程组->查看结果树
  5. 运行测试

如果后处理器看起来没有任何作用,请先检查它的位置。放置在其目标采样器作用域之外的后处理器永远不会运行,这是导致输出为空的最常见原因。tracted 变量。相关元素,例如 控制器分布式测试 遵循相同的作用域逻辑。

常见问题

预处理器会在请求发送前修改其内容。定时器只会暂停线程一段设定的时间间隔。两者都在采样器之前运行,但定时器永远不会修改请求数据。

前tractor 将该值保存到一个 JMeter 您定义的变量名。同一线程中后续的任何采样器都会在路径、标头或请求正文中使用 ${variableName} 语法引用它。

是的。现在一些人工智能助手可以读取录音回复,并建议使用正则表达式或边界对进行关联。但这些建议仍需审核,因为人工智能无法判断哪些值是真正动态变化的。

是的。人工智能助手会将原始响应与之前的响应进行比较。tractor表达式并指出esca中的不匹配之处ping,组ping或者说,在加载运行之前,请在“查看结果树”中验证修复效果。

处理器在其作用域内每次执行采样器时都会运行一次。使用十个线程时,处理器会运行。ping 五次,连接到该采样器的处理器执行五十次,每个线程都保留自己的变量值。

总结一下这篇文章: