【问题标题】:Running N no of Jmeter threads in the order of sequence按顺序运行N个Jmeter线程
【发布时间】:2016-03-20 22:53:55
【问题描述】:

虽然我找到了一个 similar question,答案并不令人满意,或者在我的情况下可能不起作用。

我没有 N 个线程要运行,假设为 5 的加速期。N 个用户的登录身份验证是从 CSV 文件传递​​的。 侦听器的报告显示线程 38 或任何其他线程在线程 1 之前运行,即第一次迭代是线程号 X(其中 X!=1)。使用循环控制器似乎不是解决方案,因为我的 N 个用户都是不同的。以下是我测试的测试报告。

Thread           Iteration Time(milliseconds)   Bytes    Success
ThreadNo 1-38         1         94551           67485       true
ThreadNo 1-69         2         92724           67200       true
ThreadNo 1-58         3         91812           66332       true
ThreadNo 1-12         4         92144           66335       true
ThreadNo 1-18         5         91737           66340       true
ThreadNo 1-17         6         93055           66514       true

所以我希望我的迭代 1 从线程 1(ThreadNo 1-1) 开始。

更新: 我的测试计划有

连续运行线程组(即一次运行一个组)

选择。

下面是我的testplan的快照

下面是jmeter日志

 jmeter.threads.JMeterThread: Thread is done: ThreadAction 1-39 
2015/12/14 02:00:37 INFO  - jmeter.threads.JMeterThread: Thread finished: ThreadAction 1-39 
2015/12/14 02:00:37 INFO  - jmeter.threads.JMeterThread: Thread is done: ThreadAction 1-49 
2015/12/14 02:00:37 INFO  - jmeter.threads.JMeterThread: Thread finished: ThreadAction 1-49 
2015/12/14 02:00:37 INFO  - jmeter.threads.JMeterThread: Thread is done: ThreadAction 1-38 
2015/12/14 02:00:37 INFO  - jmeter.threads.JMeterThread: Thread finished: ThreadAction 1-38 
2015/12/14 02:00:38 INFO  - jmeter.threads.JMeterThread: Thread is done: ThreadAction 1-41 
2015/12/14 02:00:38 INFO  - jmeter.threads.JMeterThread: Thread finished: ThreadAction 1-41 
2015/12/14 02:00:38 INFO  - jmeter.threads.JMeterThread: Thread is done: ThreadAction 1-42 
2015/12/14 02:00:38 INFO  - jmeter.threads.JMeterThread: Thread finished: ThreadAction 1-42 
2015/12/14 02:00:38 INFO  - jmeter.threads.JMeterThread: Thread is done: ThreadAction 1-34 
2015/12/14 02:00:38 INFO  - jmeter.threads.JMeterThread: Thread finished: ThreadAction 1-34 
2015/12/14 02:00:39 INFO  - jmeter.threads.JMeterThread: Thread is done: ThreadAction 1-47 
2015/12/14 02:00:39 INFO  - jmeter.threads.JMeterThread: Thread finished: ThreadAction 1-47 
2015/12/14 02:00:39 INFO  - jmeter.threads.JMeterThread: Thread is done: ThreadAction 1-40 

【问题讨论】:

  • 你能分享你的测试计划吗?
  • 好吧,我不能,但我会尝试分享其中的一部分:)
  • 好的,请分享一部分。
  • 最好分享一下测试计划的截图。
  • 为什么?整个目的是模拟 N 个独立用户 AFAIK。因此,如果您需要首先启动线程 1,那么您正在做某事,这不适合。因此,如果您说出您真正想要实现的目标,我们或许能够找到更好的解决方案。

标签: java testing automation jmeter


【解决方案1】:

告诉你一个小秘密:JMeter 确实会按顺序启动线程,你不需要采取任何额外的操作。如果您查看 jmeter.log 文件,您会看到类似

log.info("正在执行线程号的请求:" + 参数);

2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-1 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-2 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-3 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-4 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-5 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-6 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-7 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-8 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-9 
2015/12/15 18:35:31 INFO  - jmeter.threads.JMeterThread: Thread started: Thread Group 1-10 

您在测试报告中看到的似乎是请求完成时间,它应该只在理想世界中是连续的。

2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread finished: Thread Group 1-45 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread is done: Thread Group 1-47 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread finished: Thread Group 1-47 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread finished: Thread Group 1-46 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread is done: Thread Group 1-50 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread finished: Thread Group 1-50 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread is done: Thread Group 1-49 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread is done: Thread Group 1-48 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread finished: Thread Group 1-48 
2015/12/15 18:39:04 INFO  - jmeter.threads.JMeterThread: Thread finished: Thread Group 1-49

如果由于某种原因您仍然需要在第一次迭代时由第一个线程执行某些采样器 - 将其放在 If Controller 下并使用以下语句作为“条件”

${__BeanShell(vars.getIteration() == 1)} && ${__threadNum} == 1

它利用以下 JMeter 函数:

  • __threadNum() - 获取当前线程号
  • __Beanshell - 执行任意 Beanshell 脚本,在这种情况下 - 获取当前迭代(适用于线程组迭代,不会因循环控制器或其他驱动的迭代而增加)

【讨论】:

  • 是的,线程确实是按顺序启动的,但根据它们的执行时间而结束。我的问题可能不在于线程,而是确保 smae 用户在下次运行时访问相同的数据。
猜你喜欢
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 2012-05-08
相关资源
最近更新 更多