在测试中包括静态资源,如图像,css,js等

时间:2012-01-04 10:55:12

标签: performance testing jmeter

我最近开始使用JMeter为我的Web应用程序创建负载测试。我非常喜欢这个工具,在观看了一些视频后,开始创建测试非常容易。

然而有一件事我不清楚。

在JMeter主页上阅读"Best practice" section。除其他外,它说:

  

最重要的是过滤掉您不感兴趣的所有请求。例如,记录图像请求没有意义(可以指示JMeter下载页面上的所有图像 - 请参阅HTTP请求)。这些只会使你的测试计划变得混乱。

我在其他页面上也看过这个,并说你不应该在测试中包含对图像或任何其他静态资源的请求。但是,我仍然无法找到一个单独的页面,可以很好地解释为什么你不包含静态资源。

当然,JMeter不是一个浏览器,但对静态资源的请求无疑会影响您的应用程序的性能?有人可以给我一个很好的解释: - )

3 个答案:

答案 0 :(得分:7)

这完全取决于您要测试的内容。

一般来说,我使用JMeter进行两种类型的性能测试:具体测试,我看看我担心的事情,以及“安全网”测试,我测量整个应用程序以确保它确实按照我期望的方式工作。

特定测试几乎总是处理Web应用程序的动态方面 - 服务器端代码(.aspx,.php,.jsp等)。这是大多数应用程序存在瓶颈的地方 - 运行服务器端脚本的努力比从磁盘检索CSS文件并将其提供给浏览器而无需任何额外处理的努力要高很多倍。如果我正在测试服务器端脚本,我也不想加载资产 - 因为它们会混乱测试,并在测试客户端消耗带宽。我不希望我的测试失败,因为我的JMeter服务器正在每个线程上下载5MB视频文件并消耗所有带宽,而我实际上要做的是查看服务器可以支持的每秒登录次数。

测试您的网络服务器提供静态文件的能力毫无意义 - 微软,Apache团队,无论是谁,已经做过了出色的工作;除非您有特别关注的问题,否则有更好的方法来花费您的测试预算。

安全网测试将整个事情放在一起,以证明它确实以我期望的方式运作。通常,我在生产(类似)环境中运行这些,因此我有一个CDN,生产级硬件和“实时”应用程序配置。我通常会为此使用基于云的测试服务,因此我可以看到来自不同位置的性能,并产生足够的负载来强调生产级套件。您可以使用JMeter(过去我曾使用过几种JMeter Cloud服务)。这是昂贵的,可能需要停机,你应该只把它作为一个安全网。

答案 1 :(得分:6)

当您想要进行适当的性能测试(尤其是压力测试)时,您需要根据用户/线程的数量及时生成应用程序的响应时间,您需要包含所有静态资源,就像jMeter代理在您录制测试时保存了它们。

要考虑浏览器缓存,您可以使用HTTP Cache ManagerOnce Only controller,这样每个线程只会在第一次请求时下载一次静态内容。
HTTP缓存管理器是推荐的方式,更容易设置,只需将其包含在您的测试中,作为线程组的第一个子项。
一旦只需要在第一次请求时登录用户,就会定期使用控制器。

建议对非静态HTTP请求进行BTW参数化,例如,搜索相同的产品名称或例如每次都买同一本书,这通常是一个起点,可以让你大致了解你应用程序的性能效率。

希望这会有所帮助......

答案 2 :(得分:1)

除非您的应用程序被只看一页然后去的临时访问者使用,否则很有可能静态资源被下载一次,然后从浏览器缓存中提供。

此外,虽然静态资源会影响用户的带宽和总体响应时间,但它们对服务器负载的影响应该很小,而且它们可能不是您要测量的那种。

我想你需要尝试模仿实际用户对应用程序的处理方式。