2

我的任务是为我们在 Weblogic 服务器上运行的一个 Java 应用程序寻找性能测试解决方案。要求是记录生产请求(包括 POST 数据的 GET 和 POST),然后使用生产数据库的副本在性能测试环境中运行这些请求。

使用生产请求而不是测试脚本的原因是:

  1. 这是一个没有现有测试脚本的大型应用程序,因此编写脚本以覆盖整个应用程序将是大量工作。
  2. 某些性能问题仅在用户按特定顺序执行多个操作时才会出现。
  3. 使用与系统的实际用户交互进行测试,而不是估计用户如何与系统交互。我们都知道用户会做我们没有想到的事情。
  4. 我希望能够在发布到生产环境之前修复性能问题并针对固定代码重新运行请求。

我已经研究过将JMeters 访问日志采样器与服务器访问日志一起使用,但是访问日志不包含 POST 数据,并且访问日志采样器仅查看请求 URL,因此它无法模拟用户提交表单数据。

我还研究过使用 JMeter HTTP 代理服务器,但是这只能记录一个用户的操作,并且需要用户配置他们的浏览器以使用代理。Tsung 和 The Grinder 也存在同样的限制。

我已经研究过使用 Wireshark 和 TCReplay,但是在数据包级别记录过多,并且不会在请求级别提供任何有用的报告。

考虑到我需要能够在发布到生产环境之前测试修复程序,是否有更好的方法来分析生产性能?

4

4 回答 4

0

请在此页面上查看 Impetus Technologies 的这份白皮书。http://www.impetus.com/plabs/sandstorm.html

于 2009-11-16T14:33:12.423 回答
0

老实说,我不确定你被要求做的任务是否可行,更不用说一个好主意了。根据应用程序后端的复杂程度,以及重建状态的完美程度(即:一直到外部 SOA 服务或时间/时钟),可能无法使这些 GET 和 POST 请求再现相同行为。

也就是说,针对生产数据的性能测试总是很棒,但它通常需要特定于应用程序的知识,这些知识会给所述数据带来压力。简单地重复 HTTP GET 和 POST 几乎肯定不会产生有用的结果。

祝你好运!

于 2009-11-16T18:17:53.237 回答
0

这将是一个很难的问题。我使用 Visual Studio 测试版对我的应用程序进行负载测试,我们只能“估计”网站上的用户活动。

可以查看日志并收集有关通过您的应用程序的某些路径的可能性的信息。然后,您可以查看生产数据库以查看在任何发布请求中输入的可能值。从那时起,您将不得不进行接近生产站点使用模式的负载测试。

使用任何当前工具,我认为不可能记录和回放实际的用户交互。

可以更改您Web 应用程序,以便记录和记录每个请求并根据会话和日期时间发布。然后可以使用此自定义日志记录针对测试网站生成负载测试请求。这将对您现有的站点进行一些严重的代码更改,并且可能会对性能产生影响。

也就是说,我曾使用过执行此级别日志记录的 Web 应用程序,并且能够分析导致错误的页面帖子/请求的确切系列对开发人员来说非常有价值。

总而言之:这是可能的,但我还没有听说过任何现成的工具可以做到这一点。

于 2009-11-18T21:55:45.817 回答
0

我建议以下内容来获取生产请求并模拟准确的工作负载:

1) 使用 coremetrics:CoreMetrics 提供了这样的解决方案,您可以使用这些解决方案了解应用程序的使用模式。这将有助于提出准确的工作负载模型。然后可以将该模型转换为测试脚本并针对生产数据库的掩码副本执行。这将为您实时提供有关应用程序性能的准确结果。

2)另一种选择是使用 AOP(面向方面​​的方法)创建一个小型实用程序,以便它可以跟踪所有请求和相应的方法跟踪。这将有助于识别生产使用模式,进而准确模拟工作负载。可以使用 AOP 框架,例如 AspectJ。这不需要对代码进行任何更改。仪器可以在运行中完成。另一个好处是仅在特定时间窗口内启用此功能,然后可以将其关闭。

问候,电池瓦拉姆

于 2009-11-30T12:52:31.843 回答