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 请求并将 Unique Item Id 传递给它 https://www.test.com/ SearchInventory? itemId = ${itemId} 为此,我成功地使用了 For Each 循环。

但是,现在的要求是所有 100 个用户都不能点击同一个项目。每个用户都会点击一个唯一的 HTTP 请求。

比如用户 1 会调用 HTTP 请求https://www.test.com/ SearchInventory? 项目 ID = 12100,

用户 2 将调用https://www.test.com/ SearchInventory? 项目 ID = 12101,

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

像这样直到用户 100

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

在下图中,我将 Thread Group -> User 设置为 100。在每个循环中,我得到 100 个 HTTP 请求,这些请求是通过从先前的 HTTP 响应中获取 Array 中的 ItemId 动态生成的。我希望一个用户只点击 1 个请求。另一个用户将调用第二个 HTTP 请求。但是,所有这些请求都是 For Each 循环的一部分,因为它们是动态生成的。因此,对于每个用户,每个循环都会执行 100 次。

在这张图片中,我将 Thread Group -> User 设置为 100。在每个循环中,我收到 100 个 HTTP 请求。 我希望一个用户只点击 1 个请求。 另一个用户将调用第二个 HTTP 请求

4

1 回答 1

1

您需要澄清您使用的是什么形式的“数组”。例如,如果你初始化了一个 ArrayList

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

您可以通过第一个虚拟用户访问第一个元素,通过第二个虚拟用户访问第二个元素,等等。使用__BeanShell 函数,例如:

${__BeanShell(bsh.shared.myList.get(ctx.getThreadNum()),)}

演示:

JMeter Beanshell 演示

另请注意,自 JMeter 3.1 起,建议将 Groovy用于任何形式的脚本,因此请考虑在下一次有机会时迁移到 JSR223 Elements 和 Groovy 语言。请参阅Apache Groovy - 为什么以及如何使用它一文,了解有关 Groovy 性能和语法优势的更多信息。

于 2018-03-21T08:45:44.027 回答