我有一个带有以下 http 请求采样器的 JMeter 测试计划。
- 登录
- 调用一些需要登录用户的功能
- 登出
当我使用 5 个并行线程执行测试计划时,我看到在为某些线程调用采样器 1 之前调用了采样器 2,然后响应断言失败。
有没有办法指定要执行的采样器序列?
我有一个带有以下 http 请求采样器的 JMeter 测试计划。
当我使用 5 个并行线程执行测试计划时,我看到在为某些线程调用采样器 1 之前调用了采样器 2,然后响应断言失败。
有没有办法指定要执行的采样器序列?
这应该确保它们按顺序执行:
所以让我们从线程组开始。
线程数(用户)为 5。
因此,假设您已经为您的登录采样器制定了逻辑。只需添加额外的采样器。所以右键点击那个样本Add > Post Processors > BSF PostProcessor
,在这个后处理器大脚本空间里面写${__setProperty(ThreadValue,${__threadNum},)}
。
这会将线程号保存到您的名为ThreadValue
. beanshell
确保在下拉列表中选择您的语言。
然后在登录采样器之后添加 if 控制器。将此添加到条件字段(${JMeterThread.last_sample_ok}==true) && (${__property(ThreadValue,,)} == ${__threadNum})
这意味着 -> 仅在实际登录成功并且登录线程与您当前所在的线程匹配时才登录。
就是这样,您仅在 if 控制器内执行登录操作。如果您想确保注销正确的用户,请在控制器周围放置额外的位置。
干杯
您需要考虑的是,每个线程都是一个单独的实体,就像一个真实的用户,并且它有自己的会话,但是 JMeter 被设计为异步执行这些线程,即。在平行下。View Results Tree 侦听器显示来自所有线程的所有活动,无论逻辑线程顺序如何。如果您希望 1 个线程进行 5 次迭代,那么只需将线程数更改为 1 并使用 5 个循环,这将保留序列(尽管这违背了使用 JMeter 之类的负载测试工具的意义!)。
如果您确实将线程计数更改为 1,那么您可以在结果树中看到真实的逻辑执行顺序。这将显示每个采样器按顺序自上而下地执行。
现在,在您的情况下,我怀疑您遇到问题不是因为事情没有按顺序运行,而是因为服务器正在丢失请求之间的会话上下文。这很常见,而且您通常可以使用HTTP Cookie 管理器或使用正则表达式提取器来解决问题。