Jmeter缓存管理器使用
Jmeter cache manager usage
我正在使用 Jmeter 进行负载测试。
我在使用缓存存储一些用户信息时出现了Whosebug异常。
我在线程组中设置了 HTTP 缓存管理器,我认为它将作为浏览器缓存工作。但是,当我只将用户信息存储在服务器缓存中时,如何仍然出现异常? (我确保代码将信息存储在服务器端缓存中)。
有人对这个问题有一些想法吗?或者任何人都可以在 Jmeter 测试计划中提供有关服务器 side/browser 端缓存的一些信息? (我已经检查了一些网站,但仍然无法弄清楚它的概念)
谢谢。
P.S。我正在开发 ASP.net 网络应用程序
更新:
我检查了问题是由服务器端的缓存引起的。禁用缓存后不会出现异常。还有一些关于缓存的更多信息我使用了set方法来更新缓存。我仍然找不到 Whosebug 异常的解决方案或原因。
由于 Whosebug 发生在服务器端,因此存在您应该调查的错误。
这可能是由于您的 jmeter 脚本缺少参数造成的,该脚本是从可在浏览器端缓存的页面中提取的。
由于 JMeter 缓存不缓存页面内容(仅页面在缓存中这一事实),它在 JMeter 中将为空,因此如果您进行提取,它将给出一个空值。
现在关于缓存管理器,它旨在模拟浏览器缓存。
您可以阅读参考文档:
- https://jmeter.apache.org/usermanual/component_reference.html#HTTP_Cache_Manager
还有这个博客:
- https://flood.io/blog/understanding-the-jmeter-cache/The HTTP缓存管理器用于在其范围内为HTTP请求添加缓存功能,以模拟浏览器缓存功能。每个虚拟用户线程都有自己的缓存。默认情况下,缓存管理器将使用 LRU 算法在每个虚拟用户线程的缓存中存储最多 5000 个项目。使用属性 "maxSize" 修改这个值。请注意,您增加此值越多,HTTP 缓存管理器消耗的内存就越多,因此请务必相应地调整 -Xmx JVM 选项。
如果样本成功(即响应代码为 2xx),则 Last-Modified 和 Etag(以及相关的已过期)值将保存为 URL。在执行下一个采样之前,采样器检查缓存中是否有条目,如果有,则为请求设置 If-Last-Modified 和 If-None-Match 条件 header .
此外,如果选择 "Use Cache-Control/Expires header" 选项,则会根据当前时间检查 Cache-Control/Expires 值。如果请求是 GET 请求,并且时间戳是未来的,那么采样器立即 returns,而不从远程服务器请求 URL。这是为了模拟浏览器行为。请注意,如果 Cache-Control header 是 "no-cache",响应将作为 pre-expired 存储在缓存中,因此将生成一个条件 GET 请求。如果 Cache-Control 有任何其他值,则处理 "max-age" 过期选项以计算条目生存期,如果缺少则将使用过期 header,如果还缺少条目将按照 RFC 中的指定进行缓存2616 第 13.2.4 节。使用 Last-Modified 时间和响应日期。
我正在使用 Jmeter 进行负载测试。 我在使用缓存存储一些用户信息时出现了Whosebug异常。 我在线程组中设置了 HTTP 缓存管理器,我认为它将作为浏览器缓存工作。但是,当我只将用户信息存储在服务器缓存中时,如何仍然出现异常? (我确保代码将信息存储在服务器端缓存中)。
有人对这个问题有一些想法吗?或者任何人都可以在 Jmeter 测试计划中提供有关服务器 side/browser 端缓存的一些信息? (我已经检查了一些网站,但仍然无法弄清楚它的概念) 谢谢。
P.S。我正在开发 ASP.net 网络应用程序
更新: 我检查了问题是由服务器端的缓存引起的。禁用缓存后不会出现异常。还有一些关于缓存的更多信息我使用了set方法来更新缓存。我仍然找不到 Whosebug 异常的解决方案或原因。
由于 Whosebug 发生在服务器端,因此存在您应该调查的错误。
这可能是由于您的 jmeter 脚本缺少参数造成的,该脚本是从可在浏览器端缓存的页面中提取的。 由于 JMeter 缓存不缓存页面内容(仅页面在缓存中这一事实),它在 JMeter 中将为空,因此如果您进行提取,它将给出一个空值。
现在关于缓存管理器,它旨在模拟浏览器缓存。
您可以阅读参考文档:
- https://jmeter.apache.org/usermanual/component_reference.html#HTTP_Cache_Manager 还有这个博客:
- https://flood.io/blog/understanding-the-jmeter-cache/The HTTP缓存管理器用于在其范围内为HTTP请求添加缓存功能,以模拟浏览器缓存功能。每个虚拟用户线程都有自己的缓存。默认情况下,缓存管理器将使用 LRU 算法在每个虚拟用户线程的缓存中存储最多 5000 个项目。使用属性 "maxSize" 修改这个值。请注意,您增加此值越多,HTTP 缓存管理器消耗的内存就越多,因此请务必相应地调整 -Xmx JVM 选项。
如果样本成功(即响应代码为 2xx),则 Last-Modified 和 Etag(以及相关的已过期)值将保存为 URL。在执行下一个采样之前,采样器检查缓存中是否有条目,如果有,则为请求设置 If-Last-Modified 和 If-None-Match 条件 header .
此外,如果选择 "Use Cache-Control/Expires header" 选项,则会根据当前时间检查 Cache-Control/Expires 值。如果请求是 GET 请求,并且时间戳是未来的,那么采样器立即 returns,而不从远程服务器请求 URL。这是为了模拟浏览器行为。请注意,如果 Cache-Control header 是 "no-cache",响应将作为 pre-expired 存储在缓存中,因此将生成一个条件 GET 请求。如果 Cache-Control 有任何其他值,则处理 "max-age" 过期选项以计算条目生存期,如果缺少则将使用过期 header,如果还缺少条目将按照 RFC 中的指定进行缓存2616 第 13.2.4 节。使用 Last-Modified 时间和响应日期。