我有一个网站客户端轮询服务器的场景。根据响应中的数据,它们被授予/拒绝访问某些资源。客户端动态地对这些更改做出反应,并向用户显示资源或某些等待页面(被拒绝)。这是通过长轮询机制完成的。如果资源可用,则用户可以例如进行交互。回答一个问题。
我有一个包含这种长轮询机制的测试计划。我最初尝试将轮询添加到请求循环中以根据真实客户端进行模拟,但我的请求随后被延迟,直到长轮询请求得到响应。
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
是否有解决方案几乎可以映射真实场景?
答案 0 :(得分:1)
您必须从另一个threadGroup发送longpolls。那么问题是如何在两个线程组之间共享会话信息。我通过将会话信息(cookie等)写入文件并在不同的线程中读取它来做到这一点。
因此,一个线程组执行常规请求。另一个线程组会做长轮询。这是使用jmeter模拟并行http请求的方法。对我而言,它有效。