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