jMeter线程序列

时间:2012-06-22 12:43:34

标签: java multithreading performance jmeter

我有一个JMeter测试计划,其中包含以下http请求采样器。

  1. 登录
  2. 调用一些需要登录用户的功能
  3. 注销
  4. 当我使用5个并行线程执行测试计划时,我看到在为某些线程调用sampler 1之前调用了采样器2,然后失败了响应断言。

    有没有办法指定要执行的采样器序列?

2 个答案:

答案 0 :(得分:10)

这应该确保它们按顺序执行:

enter image description here

让我们从线程组开始。

线程数(用户)为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来解决问题。