JMeter - 如何模拟长轮询客户端?

时间:2014-08-20 15:33:56

标签: jmeter long-polling

我有一个网站客户端轮询服务器的场景。根据响应中的数据,它们被授予/拒绝访问某些资源。客户端动态地对这些更改做出反应,并向用户显示资源或某些等待页面(被拒绝)。这是通过长轮询机制完成的。如果资源可用,则用户可以例如进行交互。回答一个问题。

我有一个包含这种长轮询机制的测试计划。我最初尝试将轮询添加到请求循环中以根据真实客户端进行模拟,但我的请求随后被延迟,直到长轮询请求得到响应。

Thread group
 |
 |- Get State from server (saves value in variable) - no long polling here
 |- Request loop
 |  |- If Controller (checks the variable) 
       |- Loop until all resources are processed
          |- Get State - long poll **this blocks the user response until the timeout for the server response is met**
          |- User response

然后我尝试在单独的循环中运行轮询。但是,执行轮询循环时,似乎永远不会再输入请求循环。我检查了一个Debug Sampler,当服务器上有什么变化时,轮询循环确实改变了变量。

Thread group
 |
 |- Get State from server (saves value in variable) - no long polling here
 |- Request loop
 |  |- If Controller (checks the variable) 
 |     |- Loop until all resources are processed
 |        |- User response
 |
 |- Long-polling loop
 |  |- Set variable

是否有解决方案几乎可以映射真实场景?

1 个答案:

答案 0 :(得分:1)

您必须从另一个threadGroup发送longpolls。那么问题是如何在两个线程组之间共享会话信息。我通过将会话信息(cookie等)写入文件并在不同的线程中读取它来做到这一点。

因此,一个线程组执行常规请求。另一个线程组会做长轮询。这是使用jmeter模拟并行http请求的方法。对我而言,它有效。