Akamai 和 Jmeter 缓存管理器

Akamai and Jmeter cache manager

过去几周我一直在使用 Jmeter 运行。在我的 Jmeter 测试中没有端到端用例(例如登录 >> 转到个人资料页面 >> 注销)。我只是直接点击我的应用程序的几个重要页面。例如注册页面、首页、关于我们等

如何提供这些页面:

场景 1:用户 >> Akamai >> 服务器 >> Akamai >> 用户

场景 2:用户 >> Akamai >> 用户(即在 Akamai 中缓存所有页面之后)

当我 运行 Jmeter 测试时,他们有 99% 的机会从 Akamai 获得服务,即场景 2。

问题:

  1. 方案 2 是否需要 HTTP 缓存管理器?我的意思是为什么我需要在 Akamai 缓存两次并同时在我机器的 RAM 缓存两次页面?
  2. 仅当对 #1 的回答为是时:这 mandatory/optimum 是将缓存管理器与 cookie 管理器一起使用吗?
  3. 仅当对 #1 的回答为是时:我的脚本编写为:Test Plan >> Thread group >> Throughput Controller >> 80+ HTTP Request Sampler (actually pages)。那么我是否需要在吞吐量控制器级别或每个 HTTP 请求采样器内部的 HTTP 缓存管理器?

根据您的问题,我了解到 Akamai 是提供静态页面的 CDN。

牢记这一点,我的回答如下:

  1. 方案 2 是否需要 HTTP 缓存管理器?我的意思是为什么我需要在 Akamai 缓存两次并同时在我机器的 RAM 缓存两次页面?

是或否。取决于您要实现的配置。您必须了解 Akamai(CDN 缓存)提供的 b/w 页面与存储在用户计算机本地的页面的不同之处。

本地缓存 - 检索页面的最快方式。 (通过 Cach-Control: max-age 指令实现)。如果指定,则无需访问 Akamai 服务器。浏览器从本地缓存本身获取页面。如果 max-age 过期,则浏览器发送重新验证请求以检查它是否具有最新副本。 CDN/Server 验证它,如果副本是最新的,则发送 304(未修改)。否则,使用新 max-age 提供的页面的最新副本(max-age 仅在实施时发送)。

所以,重点是服务器如何配置来处理缓存。如果使用 Expires/Cache-Control 实现本地缓存,则必须将 HTTP Cache Manager 添加到测试计划。

2。仅当对 #1 的回答为是时:这是 mandatory/optimum 将缓存管理器与 cookie 管理器一起使用吗? 通常情况下,Cache 是独立于用户的。 Cookie 管理器是通过发送 Cookie 来使用户真实。缓存管理器可减少加载页面时的网络延迟(往返)。如果登录用户和匿名用户的缓存机制实现不同,那么您必须考虑这两种情况。否则,不需要 Cookie 管理器。

3。仅当对 #1 的回答为是时:我的脚本编写为:测试计划 >> 线程组 >> 吞吐量控制器 >> 80+ HTTP 请求采样器(实际上是页面)。那么我是否需要在吞吐量控制器级别或在每个 HTTP 请求采样器内部的 HTTP 缓存管理器?

通常,您将 HTTP Cache Manager 添加到层次结构的顶部(在测试计划或线程组下),因此它将适用于所有采样器 (children)。

注意: 我强烈建议使用 Browser -> F12 -> Network tab 了解 HTTP 级别(JMeter 工作的级别)的应用程序行为。这给出了发送到加载浏览器的每个 HTTP 请求,并从本地缓存或 CDN 或服务器等检索响应。

请完成以下 header 以完全理解该行为:

  1. Cache-Control header(max-age 指令)
  2. ETag header
  3. Last-Modified header
  4. 过期

以下是开头的参考资料:

  1. http://dev.mobify.com/blog/beginners-guide-to-http-cache-headers/
  2. https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching
  3. https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html

当您进行负载测试时,您必须尽可能接近真实用户,否则您的负载测试就没有意义。所以关于你的问题:

  1. 是的,您需要将 HTTP 缓存管理器添加到您的测试计划中。此外,您需要 "tell" 所有 HTTP 请求采样器到

    • "Retrieve All Embedded Resources"
    • 并为此使用 "Parallel Downloads"

    将此配置应用于所有 HTTP 请求采样器的最佳方法是使用 HTTP Request Defaults

  2. HTTP 缓存管理器和 HTTP Cookie 管理器是不同的野兽,但鉴于您正在构建 Web 测试计划,您需要 add a cookie support

  3. 每个 Thread Group. See Scoping Rules 用户手册章节都需要 HTTP 缓存 Manager/Cookie 管理器以获取详细信息。

另外别忘了用HTTP Header Managers代表浏览器headers。