JMETER 'N' 调用动态生成的不同 HTTP 请求的用户数
JMETER 'N' number of users calling different HTTP Requests generated dynamically
100 位用户将登录
https://www.test.com/login
因此,我创建了 ThreadGroup 并设置了必要的值。已创建 HTTP 请求。
然后,所有用户都将导航到 SearchInventory
https://www.test.com/ SearchInventory -> 它将 return 1000 项作为 HTTP 响应。每件商品都有唯一的 SKU Id。使用 REGEX 和 BEAN Shell ,我能够从 HTTP 响应中获取唯一的 ID 并将它们存储在数组中。
然后,我需要调用下面的 HTTP 请求并将 Unique Item Id 传递给它
https://www.test.com/ 搜索库存? itemId = ${itemId}
为此,我成功地使用了 For Each 循环。
但是,现在的要求是所有100个用户都不能点击同一个Item。每个用户都会发出一个唯一的 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 响应中获取数组内的 ItemId 动态生成的。我希望一个用户只点击 1 个请求。另一个用户将调用第二个 HTTP 请求。但是,所有这些请求都是 For Each 循环的一部分,因为它们是动态生成的。因此,对于每个循环,每个用户执行 100 次。
您需要说明您使用的 "array" 是什么形式。例如,如果你初始化一个 ArrayList 像
List myList = new ArrayList();
myList.add("12100");
myList.add("12101");
myList.add("12102");
bsh.shared.myList = myList;
您可以通过第一个虚拟用户访问第一个元素,通过第二个虚拟用户访问第二个元素,以此类推,使用 __BeanShell function 如:
${__BeanShell(bsh.shared.myList.get(ctx.getThreadNum()),)}
演示:
另请注意 since JMeter 3.1 it is recommended to use Groovy for any form of scripting so consider migrating to JSR223 Elements and Groovy language on next available opportunity. See Apache Groovy - Why and How You Should Use It 文章,了解有关 Groovy 性能和语法优势的更多信息。
100 位用户将登录 https://www.test.com/login 因此,我创建了 ThreadGroup 并设置了必要的值。已创建 HTTP 请求。
然后,所有用户都将导航到 SearchInventory https://www.test.com/ SearchInventory -> 它将 return 1000 项作为 HTTP 响应。每件商品都有唯一的 SKU Id。使用 REGEX 和 BEAN Shell ,我能够从 HTTP 响应中获取唯一的 ID 并将它们存储在数组中。
然后,我需要调用下面的 HTTP 请求并将 Unique Item Id 传递给它 https://www.test.com/ 搜索库存? itemId = ${itemId} 为此,我成功地使用了 For Each 循环。
但是,现在的要求是所有100个用户都不能点击同一个Item。每个用户都会发出一个唯一的 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 响应中获取数组内的 ItemId 动态生成的。我希望一个用户只点击 1 个请求。另一个用户将调用第二个 HTTP 请求。但是,所有这些请求都是 For Each 循环的一部分,因为它们是动态生成的。因此,对于每个循环,每个用户执行 100 次。
您需要说明您使用的 "array" 是什么形式。例如,如果你初始化一个 ArrayList 像
List myList = new ArrayList();
myList.add("12100");
myList.add("12101");
myList.add("12102");
bsh.shared.myList = myList;
您可以通过第一个虚拟用户访问第一个元素,通过第二个虚拟用户访问第二个元素,以此类推,使用 __BeanShell function 如:
${__BeanShell(bsh.shared.myList.get(ctx.getThreadNum()),)}
演示:
另请注意 since JMeter 3.1 it is recommended to use Groovy for any form of scripting so consider migrating to JSR223 Elements and Groovy language on next available opportunity. See Apache Groovy - Why and How You Should Use It 文章,了解有关 Groovy 性能和语法优势的更多信息。