我是Jmaeter的新手,目前正试图充分利用它来创建API性能测试计划。
让我们采取以下方案。
我们有一个APi,可以返回一个或多个零件的零件可用性和订单详细信息等数据。
我想分析不同负载模式下api的响应时间。
假设我们有5个用户。 - 每个用户向API发送一系列重复的请求。 - 每个用户发出的请求仅对该用户是唯一的。 即 用户1请求部分a,b,c。 用户2请求部分d,e,f ......等等
- 所有用户都在同时处理他们的请求。
我接近这个的方法是为每个用户创建5个独立的线程组。 每个线程组内是每个用户发送的特定http请求。 每个http请求由其自己的循环控制器管理,其中我已设置每个请求发送的次数
由于我希望所有用户立即发送请求,因此我取消选中 在主测试计划中“连续运行线程组”。一眼就看出测试计划看起来像这样: test plan view
由于我刚接触使用Jmeter和性能测试,我对我的方法有一些疑问:
在增加我可能希望测试的用户数量方面,我构建测试计划的方式是否合适且可维护? 或者让一个包含5个子循环控制器的线程组更好,每个子控制器都包含用户特定的请求主体数据?
使用我当前的设置,每个线程组使用默认的加速时间为1秒。我认为这没关系,因为每个线程组只代表一个用户。但是我认为这可能会导致每次测试运行的启动延迟。还有其他任何可能更好的方法来处理这个问题,例如使用调度程序或增加每个线程组的加速时间,以便它们完全在同一时间开始?
提前感谢任何建议
答案 0 :(得分:0)
你的方法是正确的。
如果您希望请求并行,则它们必须位于单独的线程组中。每个线程组都应该为用例建模。在您的情况下,用例是特定的请求组合。
通过长时间运行测试,您将不会感受到加速时间的影响。
答案 1 :(得分:0)
首先,您的测试需要切合实际,它应该尽可能地代表真实用户(或用户组)。如果测试做到了 - 这是一个很好的测试,反之亦然。类似的东西:
如果User1和User2代表2个不同的用户组(例如User1经过身份验证,User2未经过身份验证,或者User1是admin,User2是guest),则他们应该进入不同的线程组。
最好使用线程组迭代而不是循环控制器,因为像HTTP Cookie Manager这样的一些测试元素具有Clear Cookies each Iteration
之类的设置,它们不会受到Loop或While Controller产生的迭代的影响,他们只考虑线程组驱动的迭代
保证同时发送请求的唯一方法是将它们放在一个线程组下并使用Synchronizing Timer
在实际负载测试中,您应始终逐渐添加负载,以便将响应时间,吞吐量,错误率等各种指标与增加的虚拟用户数相关联。同样的方法应该应用于#34;斜降",您不应该立即关闭负载,以便能够看到您的应用程序在加载后如何恢复。您可能希望使用一些custom Thread Groups available via JMeter Plugins project,例如:
它们提供了灵活方便的方法来设置所需的负载模式。