我在JMeter中遇到了一个奇怪的问题,几乎看起来像是个错误。我正在运行5.1.1 r1855137版本。
我有一个标准的HTTP Request Sampler
和一个HTTP Cache Manager
。 HTTP请求设置为Follow Redirects
。它还设置为Use KeepAlive
,并以最多6个并行下载的方式下载所有嵌入式资源。缓存管理器设置为Clear cache each iteration
,并使用Cache-Control/Expires headers
。缓存中设置了5000个元素。
我创建了一个带有循环控制器的线程组。 HTTP请求采样器位于此线程组和循环内。初始请求中的页面返回一个HTTP/1.1 302 Found
。我还注意到标题中有Cache-Control: private, s-maxage=0
。在循环中,JMeter第一次进行重定向,并下载了所有资源。随后的断言很好。第二次,JMeter仅发送对初始页面的请求,然后不遵循重定向。后断言失败,因为我期望在子请求中找不到对象。
我知道这是一个缓存问题,因为如果我删除线程组中的循环控制器,而是使线程组循环,问题将会消失。 IF 我将选项保留为“清除每次迭代的缓存。”在缓存管理器上选中。如果我关闭此选项,则在线程组循环时会发生相同的问题。
有人知道缓存管理器处于活动状态时,为什么JMeter不遵循302重定向吗?网站是否没有通过提供private, s-maxage=0
的Cache-Control标头来遵循正确的协议?
答案 0 :(得分:1)
查看JMeter源代码,JMeter缓存2xx和304s。和GET请求。参见:https://github.com/apache/jmeter/blob/master/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/CacheManager.java#L355
因此它不应该缓存您的302。您是否尝试过使用“自动重定向”选项来查看其是否正常工作: