我正在用jmeter运行负载测试。我有登录服务和要测试的 serviceX 。我希望登录服务中的 Authtoken 能够运行serviceX。令牌每分钟过期一次。目前,我在同一线程组中具有登录服务,并且与serviceX一样运行。我不想继续这个。我想在单线程中每分钟运行一次登录服务,并将令牌传递给serviceX,然后ServiceX运行定义的线程数和时间。如何做到这一点?
答案 0 :(得分:1)
使用Once Only Controller实现这一目标。该控制器仅在per thread
内执行一次请求,并在测试计划的进一步迭代过程中跳过其下的任何其他请求。
因此,您可以将登录服务放在“仅一次控制器”内,serviceX
放在控制器外。您必须为迭代配置相应的线程组,或者可以将serviceX
包装在Loop Controller下。
示例:
说,您只想login
一次,然后想运行serviceX
10次,这是下面的测试计划示例:
请记住,您要每分钟登录一次,并且每个线程上唯一的控制器运行一次,因此您必须相应地使用加速线程组。假设有两个线程,它们将以一分钟的间隔登录,那么线程组的配置将如下所示:
现在,如果要在第一次线程登录后运行serviceX
5次,请将serviceX
放在循环控制器作用域下,并将循环计数值设置为5
>
这是该示例测试计划的结果:
希望这会有所帮助!
答案 1 :(得分:0)
如果您在所有线程(虚拟用户)中仅使用一个令牌,则可以在测试计划中添加另外一个具有1个线程和无限循环数的Thread Group,并向其中添加一个HTTP Request采样器以及相关的Post-Processor来提取令牌。还添加Constant Timer以在请求之间添加暂停,即使用55000
毫秒作为线程延迟值。
拥有令牌后,您可以通过__setProperty() function
将其转换为JMeter属性在“主”线程组中,您可以使用__P() function
读取当前令牌值。