启用缓存时,JMeter 不会跟踪重定向



我在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只发送初始页面的请求,然后不遵循重定向。以下断言失败,因为缺少我希望在子请求中找到的对象。

我知道这是一个缓存问题,因为如果我删除线程组中的循环控制器,而是使线程组循环,如果我将选项保留为"每次迭代清除缓存"选项,问题就会消失,在缓存管理器上选中。如果我关闭此选项,线程组循环时会出现同样的问题。

有谁知道为什么 JMeter 在缓存管理器处于活动状态时不遵循 302 重定向?网站是否没有通过提供private, s-maxage=0的缓存控制标头来遵循正确的协议?

查看JMeter源代码,JMeter缓存了2xx和304。和 GET 请求。请参阅:https://github.com/apache/jmeter/blob/master/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/CacheManager.java#L355

所以它不应该缓存你的 302。您是否尝试过使用"自动重定向"选项以查看其是否正常工作:

最新更新