JMETER' N'调用动态生成的不同HTTP请求的用户数

时间:2018-03-21 05:25:12

标签: jmeter jmeter-4.0

100位用户将登录 https://www.test.com/login 因此,我创建了ThreadGroup并设置了必要的值。创建HTTP请求。

然后,所有用户都将导航到SearchInventory https://www.test.com/ SearchInventory - >它将返回1000个项目作为HTTP响应。每个项目都有唯一的SKU ID。使用REGEX和BEAN Shell,我可以从HTTP响应中获取唯一的ID并将它们存储在数组中。

然后,我需要在HTTP请求下面调用并向其传递唯一项ID https://www.test.com/ SearchInventory? itemId = $ {itemId} 为此,我成功使用For Each循环。

但是,现在要求所有100个用户都无法点击相同的项目。每个用户都会遇到一个唯一的HTTP请求。

例如,用户1将调用HTTP请求https://www.test.com/ SearchInventory? itemId = 12100,

用户2会拨打https://www.test.com/ SearchInventory? itemId = 12101,

用户3将拨打https://www.test.com/ SearchInventory? itemId = 12102等。

直到用户100

有没有办法在JMETER中做这些事情?

在下图中,我设置了线程组 - >用户为100.在每个循环中,我收到100个HTTP请求,这些请求是通过从先前的HTTP响应中获取Array内的ItemId而动态生成的。我希望一个用户只能打一个请求。另一个用户将调用第二个HTTP请求。但是,所有请求都是For Each循环的一部分,因为它们是动态生成的。因此,对于每个用户,每个循环执行100次。

In this image, I set Thread Group -> User to 100. In For each loop, I am getting 100 HTTP requests. I want one user to hit only 1 request. Another user will call second HTTP requests

1 个答案:

答案 0 :(得分:1)

你需要澄清什么形式的"数组"你正在使用。例如,如果您初始化了ArrayList之类的

SELECT * FROM entries e
WHERE EXISTS(SELECT id FROM authors a WHERE e.id = a.id)

您可以使用__BeanShell function访问第1个虚拟用户的第1个元素,第2个虚拟用户访问第2个元素,等等:

List myList = new ArrayList();
myList.add("12100");
myList.add("12101");
myList.add("12102");
bsh.shared.myList = myList;

演示:

JMeter Beanshell Demo

还要注意since JMeter 3.1 it is recommended to use Groovy用于任何形式的脚本,因此请考虑在下一个可用机会上迁移到JSR223 Elements和Groovy语言。有关Groovy性能和语法优势的详细信息,请参阅Apache Groovy - Why and How You Should Use It文章。