Jmeter 性能测试方法

Jmeter 性能测试方法,jmeter,performance-testing,load-testing,loadrunner,Jmeter,Performance Testing,Load Testing,Loadrunner,我的应用程序中有用户注册,航班搜索,订票模块。我已经创建了JMeter测试&测试中的每个模块都有不同的线程组。我验证了&它工作得很好 线程组1:XX用户数-访问站点-单击回归,输入详细信息并注册。(粗体->循环-一次又一次发生) 线程组2:XX个用户-访问站点-登录,-搜索航班-(粗体->循环-一次又一次发生) 线程组3:XX个用户数-访问站点-登录,预订票证-(粗体->循环-一次又一次发生) 问题: 我的经理说,我们需要与适当的用户一起运行所有模块(所有线程组),因为这就是它在生产中的运

我的应用程序中有
用户注册
航班搜索
订票
模块。我已经创建了JMeter测试&测试中的每个模块都有不同的线程组。我验证了&它工作得很好

  • 线程组1:XX用户数-访问站点-单击回归,输入详细信息并注册。(粗体->循环-一次又一次发生)
  • 线程组2:XX个用户-访问站点-登录,-搜索航班-(粗体->循环-一次又一次发生)
  • 线程组3:XX个用户数-访问站点-登录,预订票证-(粗体->循环-一次又一次发生)
问题:

我的经理说,我们需要与适当的用户一起运行所有模块(所有线程组),因为这就是它在生产中的运行方式。即使我可以一起运行它们,如果出现问题,我也不知道应用程序的哪个特性导致了问题

我的目标是分别运行每个模块并找到其性能。我认为模块化是获得响应时间、资源利用率等的正确方法

澄清:

  • 我在性能测试方面没有太多经验。什么是正确的方法/如何为应用程序进行测试
  • 如果我必须找到服务器的最佳负载(在该负载下它的性能更好)-我的方法应该是什么


故意标记
loadrunner
,因为这个问题不是特定于
JMeter
&它是通用的。

方法实际上取决于测试练习的目标。如果您希望优化或分析某个特定模块,那么单独测试它是有意义的

但是,如果您试图检查服务器是否可以扩展,或者是否有足够的容量,那么您应该立即测试所有模块,以达到或高于预期的负载级别

您的孤立方法的反例:

假设您必须使用模块A和模块B。它们都是CPU密集型的,运行它们时占用80%的CPU。您首先测试了一个,它使用了80%的CPU,您有20%的空闲时间,它的性能很好。现在你单独测试B,同样的结果


现在,您进入生产环境,用户尝试同时使用A和B模块,这两个模块都试图使用80%的CPU,突然您没有足够的CPU,性能受到影响。

如果您的目标是代表人类行为来评估部署风险,那么对每个业务流程进行原子化测试将无法实现您的目标


您似乎正在参与一个更恰当地称为性能单元测试的过程。这在开发人员(与性能测试人员不同)中非常常见,他们试图在一定数量的用户中验证单个业务流程的性能。这些通常也被划分为非正常思考时间(通常完全消除)、小数据集、小于有用的测试环境和极短的测试持续时间,例如5-15分钟。

您可以将此业务场景标记为事务,这意味着每个模块的HTTP请求将分组为一个组或事务中的ex-Login请求,将航班作为一个组或事务进行搜索,并类似地搜索预订机票等。按照此操作,您将以集成方式对其进行测试,这也将是一个类似于生产的场景。由于分组的原因,在跑步后,您可以很容易地找出哪一组请求需要花费更多的时间(搜索、预订机票等)。。。通过这种方式,您将获得准确的性能统计数据,您也将实现类似于生产的场景

我知道这有点晚了,但仍然存在

我在性能测试方面没有太多经验。问题是什么 正确的方法/如何对应用程序进行测试

正如James提到的,在正常场景中进行性能测试的方法是同时运行所有关键业务流,而不是以孤立的方式运行

为了识别问题,我们将请求分组到事务下,并适当地命名业务流。这将有助于识别哪些请求失败,以及应用程序的哪些功能/部分出现故障

单独运行它们不会为您提供更多的见解,因为负载测试工具只能确认瓶颈的存在,而不能确认根本原因,而不管涉及的业务流数量如何

如果我必须找到服务器的最佳负载(在该负载下性能更好) -我的方法应该是什么


为了确定服务器的最佳负载,必须同时运行所有脚本,因为最终用户将同时访问应用程序(所有关键场景),而不是以模块化方式。如果模块占用80%的CPU,这本身就是一个问题。我的观点是,如果你把它们都运行起来,你将如何缩小范围来发现问题!!这就是监控和分析的用武之地。在没有适当的服务器端监控的情况下运行性能测试就像描述了一场白费力气的追逐。我将尝试使用事务控制器。