如何在jmeter中同时运行线程

Posted

技术标签:

【中文标题】如何在jmeter中同时运行线程【英文标题】:How to run threads concurrently in jmeter 【发布时间】:2018-03-12 06:48:29 【问题描述】:

您好,我创建了一个包含 10 个事务控制器的线程组,每个控件都有多个 HTTP 请求采样器。 现在要根据需求确定瓶颈,每个事务控制必须一个接一个地运行。 例如:30 个线程 - 注册并登录。发送报告和注销是场景。 因此,对于每个操作,我创建了 1 个事务控制器,其中包含所需的 http 采样器请求。首先,我需要为 30 个用户运行注册。在获得所有 30 个用户的响应后,只有登录事务控制器应该运行。等等..一一。 我尝试创建多个线程组,但我在每个组中获取安全令牌。因此,如果我创建多个线程组,我不能在另一个线程组中调用一个线程组的变量值。 因此,如果有人知道解决方案,请帮助我,我是 jmeter 的初学者...

【问题讨论】:

【参考方案1】:

这可以仅使用 JMeter 的“同步计时器”元素来实现。请在下面找到该元素的简要说明:

同步计时器:当您有意在特定步骤暂停用户/线程直到达到此元素中提到的用户计数时,使用此元素

您可以按照以下结构创建脚本:

注册请求的事务控制器 HTTP 注册请求1 HTTP 注册请求2 登录请求的事务控制器 HTTP 注册登录 1 同步定时器[根据您的要求将“要分组的模拟用户数”设置为 30 和超时[建议设置的值为“300000”,即 5 分钟]。不要将 Timeout 设置为“0”,否则如果任何用户在上一步中失败,您的测试将永远保持运行状态] HTTP 注册登录2 HTTP 注册登录3

注意:在上面的示例中,您可以看到我已将同步计时器添加为登录事务控制器下的第一个 HTTP 采样器请求的子项。

当测试到达'HTTP Register Login1'然后在发送这个请求之前,它会执行同步定时器并等待所有用户完成注册动作。

对于初学者来说,RedLine13 的以下博文对于快速入门 JMeter 非常有用:

https://www.redline13.com/blog/kb/

另外,当你使用同步定时器时,响应时间肯定会增加,因为这个定时器会暂停测试,直到所有用户都到达步骤,然后执行登录操作。由于所有 30 个用户将同时执行登录操作,因此与一些用户进行注册而另一些用户进行登录的情况相比,响应时间会更长。

如果您有任何问题,请告诉我。

【讨论】:

感谢@ravi sharma,这是非常有价值的信息。我已经在我的测试场景中实现了这一点,但我有一个疑问。例如,那里有 10 个事务控制器,预计第二个控制器响应时间约为 10-15 秒。但是如果我按照上面的方法使用同步计时器,我的响应时间就会很长。那么我怎样才能计算出准确的响应时间呢?我正在执行上述逻辑来查找瓶颈,我需要准备一份带有瓶颈的报告。所以我正在使用这个计时器。但如果它增加了响应时间,那么我会遇到麻烦,请帮我解决这个问题。谢谢。 Avinash,你能告诉我确切的响应时间是什么意思吗? 另外,同步定时器的目的是让所有用户同时发送http请求[比如登录],所以预计响应时间会上升,你可以考虑响应您在汇总报告中获得正确的时间。 这里我指的是从服务器到响应采样器所花费的时间。不使用计时器我得到的响应时间很短。但是在使用计时器之后,它需要更多的响应时间。在报告中我需要提到正确的响应时间,我担心如果我提到高响应时间,使用这个计时器,那么它就不合适了..这是我的担忧.. 我会说两个响应时间[带或不带同步计时器]都是正确的,那么只有将响应时间延长[带同步计时器]的是用户在第二个控制器中点击请求的方式.【参考方案2】:

如果您希望只有在所有 30 个用户完成“注册”交易后才开始“登录”交易,您需要:

    在“注册”和“登录”事务控制器之间添加 Test Action 采样器 将Synchronizing Timer 添加为测试操作采样器的子项,并将Number of Simultaneous Users to Group by 设置为30

这样,Test Action 采样器将充当“集合点”,因此所有 30 个线程将在那里“相遇”,这样您就可以确信所有 30 个线程在开始登录之前都已完成注册。

示例测试计划:

【讨论】:

非常感谢它按我的需要工作。但是与之前的结果相比,即没有添加同步定时器的测试动作,响应延迟更小。通过添加这个响应时间比以前长一点...所以你能告诉我原因...谢谢

以上是关于如何在jmeter中同时运行线程的主要内容,如果未能解决你的问题,请参考以下文章

使用 JMeter 进行测试:如何每秒运行 N 个请求

如何在运行时更改JMeter的负载

jmeter并发数和线程数的区别

jmeter并发数和线程数的区别

如何在Junit测试中运行Jmeter线程组

Jmeter应该同时执行查询,但同时查询不应该在并行线程中重复