【问题标题】:How do I make JMeter create simultaneous HTTP requests for a workflow?如何让 JMeter 为工作流创建同步 HTTP 请求?
【发布时间】:2012-11-07 06:05:32
【问题描述】:

我的工作流程涉及保存一些数据,然后在几秒钟后对其进行更新。我创建了一个带有如下参数的 CSV 文件:

ID,Success
1,true
2,false
3,true
4,false
5,true

等等等等。第一个 HTTP 请求是保存一个新 ID:

POST http://server/save
{ id: 1 }

第二个 HTTP 请求用状态更新 ID:

POST http://server/update/
{ id: 1, success: true }

我创建了一个 JMeter 测试来对这个工作流程进行基准测试。我通过以下步骤创建了一个线程组

1. Do save request
2. Wait a random period between 5 and 30 seconds
3. Do update request

我已将我的 线程组 设置为一次使用 2 个线程作为初始测试。但是,我注意到发生的事情实际上是这样的:

Thread 1
----------------------------------------------------
| 1. Do save request                               |
| 2. Wait a random period between 5 and 30 seconds |
| 3. Do an update request                          |
|--------------------------------------------------|

Thread 2
----------------------------------------------------
| 1. Do save request                               |
| 2. Wait a random period between 5 and 30 seconds |
| 3. Do an update request                          |
|--------------------------------------------------|

问题是,我真正想做的是确保始终有 2 个同时 HTTP 请求发送到服务器。在这种情况下,它产生 2 个线程并作为一个线程运行整个工作流程,这意味着我不能保证服务器上的特定负载。我希望它做的是:

Thread 1
-------------------------------------------------------
|                                                     |
|  HTTP request                                       |
|  **********************************************     |
|  * 1. Do save request                         *     |
|  **********************************************     |
|                                                     |
|    2. Wait a random period between 5 and 30 seconds |
|                                                     |
|  HTTP request                                       |
|  **********************************************     |
|  * 3. Do update request                       *     |
|  **********************************************     |
|                                                     |
|-----------------------------------------------------|

有没有一种方法可以编写我的 JMeter 测试,以确保服务器上始终有 2 个同时发生的 HTTP 请求?此外,更新请求必须在保存请求之后发生,否则 ID 将不存在。

这是我的 JMeter 测试的图像:

while 控制器只处理 CSV 文件中的每一行。

【问题讨论】:

  • 为什么要使用一个线程发送安静的随机请求而不是两个线程依次发送请求?
  • 因为我需要模拟一个工作流,用户保存一些数据,在他的页面上确认,然后发送成功状态。例如,想想购物车。用户首先创建一个购物车,在他的屏幕上确认购物车看起来正确,然后下订单。
  • 有什么消息吗?我的回答有帮助吗?如果是你应该接受它,如果不是你可以评论
  • 您好 PMD,我找到了另一个使用 JMeter 插件的解决方案,可在此处获得:code.google.com/p/jmeter-plugins。它提供了一个吞吐量整形定时器,它完全符合我的需要(限制每秒向服务器发出的请求数)。

标签: jmeter load-testing


【解决方案1】:

很抱歉,我不明白你的问题。 您究竟想达到什么目标,尤其是在您的上一个工作流程描述中。

无论如何,如果您注意到您没有同时请求具有 2 个线程的请求,因为您有较长的暂停时间并且只有 2 个线程,所以这些线程可以完全正常。

尝试使用 100 个线程,您会发现有并发请求。

关于您的测试计划的一些说明:

  • 您不需要 while 控制器迭代 CSV,只需将线程组中的迭代设置为无限

  • 在加载测试时删除查看树结果和响应时间图

【讨论】:

  • 我的暂停时间完全模拟了用户的工作流程,2 只是一个例子。真正的负载测试会有数千个线程。
【解决方案2】:

降低线程组中线程的“加速”周期(给它 0 秒)。 这意味着它们将同时启动。

【讨论】:

  • 你误解了这个问题。问题不在于线程是否同时启动。问题是线程将休眠 x 秒数,在此期间没有向服务器发出请求。
猜你喜欢
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2015-11-21
相关资源
最近更新 更多