JMeter - 为什么我的变量在我的测试中途被重新评估?

JMeter - Why is my variable being re-evaluated midway through my test?

我 post 最初以更复杂的方式编辑了这个问题,但我现在更简单地重现了这个问题,所以我正在广泛编辑我的 post。

我有一个简单的测试计划来练习 API。

它做的第一件事是创建一个简单的会话 HTTP POST。然后我们使用 JSON Path Extractor 插件从响应中提取会话 ID:

这会将新创建的会话 ID 读入名为 id_JSON 的变量中,随后的 PUT 请求在其路径中使用会话 ID,即 /api/sessions/${id_JSON}/account.

这通常运行良好,但我注意到间歇性地,id_JSON 会突然具有默认值 NOT_FOUND。示例将失败,当我查看请求时,我可以看到它试图命中 /api/sessions/NOT_FOUND/account 而不是有效 ID。现在真正让我困惑的是,这会在请求已经成功引用 ${id_JSON} 并生成有效路径之后发生。看起来这应该是不可能的,除非 id_JSON 的值被动态检查或反复查找 - 否则它如何从一个请求到下一个请求得出不同的值?

似乎如果任何 Sample 失败,无论出于何种原因,同一线程迭代中的后续请求都会失败,id_JSON 具有默认值 NOT_FOUND

我是否需要以任何特殊方式声明或管理变量 id_JSON 以确保它将获取会话 ID 的值并在整个线程迭代中保留它,直到下一次迭代用下一个会话 ID?

"Go to next loop iteration" 在线程组级别上运行。

使用任何嵌套循环控制器不会增加全局迭代计数器。您可以使用以下任一方式对其进行测试:

因此,如果您将 "looping" 移动到线程组级别并移除嵌套循环控制器(或将它们的循环计数设置为 1),您的方法应该会如您预期的那样工作。

提取器是一个 Post Processor,这意味着它在每个采样器之后应用。因此,在您的情况下,它将 运行 用于 First Get 和 4 Puts。

所以你注意到的是绝对规则的,如果采样器失败,提取器将无法提取 ID 并将 NOT_FOUND 放入值中。

如果您确定它不会改变,那么只需将 Post 处理器作为第一个名为 "Create Session" 的 HTTP 请求的子级,然后它只会 运行并且变量不会再改变。

您可以在以下位置阅读更多相关信息: