JMeter-如何模拟长轮询客户端?
我有一个web客户端轮询服务器的场景。根据响应中的数据,允许/拒绝他们访问某些资源。客户端动态地对这些更改做出反应,并向用户显示资源或某个等待页面(拒绝)。这是通过长轮询机制实现的。如果资源可用,用户可以进行交互,例如回答问题 我有一个包含这种长轮询机制的测试计划。我最初尝试将轮询添加到请求循环中,以根据实际客户机进行模拟,但我的请求随后被延迟,直到长轮询请求得到响应JMeter-如何模拟长轮询客户端?,jmeter,long-polling,Jmeter,Long Polling,我有一个web客户端轮询服务器的场景。根据响应中的数据,允许/拒绝他们访问某些资源。客户端动态地对这些更改做出反应,并向用户显示资源或某个等待页面(拒绝)。这是通过长轮询机制实现的。如果资源可用,用户可以进行交互,例如回答问题 我有一个包含这种长轮询机制的测试计划。我最初尝试将轮询添加到请求循环中,以根据实际客户机进行模拟,但我的请求随后被延迟,直到长轮询请求得到响应 Thread group | |- Get State from server (saves value in variab
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
然后我尝试在一个单独的循环中运行轮询。然而,在执行轮询循环时,似乎再也不会进入请求循环。我使用调试采样器检查,只要服务器上发生更改,轮询循环确实会更改变量
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
是否有一种解决方案可以接近真实场景?您必须从不同的线程组发送长轮询。接下来的问题是如何在两个线程组之间共享会话信息。我通过将会话信息(cookies等)写入一个文件并在不同的线程中读取它们来实现这一点
因此,一个线程组可以执行常规请求。另一个线程组将进行长时间的轮询。这是使用jmeter模拟并行http请求的方法。对我来说,它起作用了。你能提供两个你尝试过的模式吗?我对你的问题有点困惑,试着让它更清楚一点,我编辑了我的文章,让它包含更多的细节,我也重新表述了大部分内容。希望现在更清楚了。模式现在更为详细,但并没有显示所有细节。我尽量保持简单;-)是否像这里的Ajax长轮询中描述的那样是长轮询:对于Get State,您希望发生什么?我不能百分之百确定是否是Ajax长轮询,但我认为是这样。与链接中的示例相比,我们实现的唯一区别在于,即使没有数据更改,我们的服务器也总是在某个超时后响应。Get状态在最好的情况下应该与其他请求并行出现,并且在轮询时不会干扰它们。它基本上充当一个关闭或打开的门,以便客户端知道特定资源可用或关闭。没有人知道如何做到这一点:(