我使用 JMETER 4.0 创建了一个性能测试套件,我有多个测试用例,分为 2 个片段,我从单个线程调用它们。以下是 2 个片段中的测试用例类型。
测试片段1:对用户的CURD操作
测试片段 2:从 MongoDB 和 API 获取用户计数并进行比较 来自测试片段 1 的测试用例首先根据线程数运行多次,然后来自第二个片段的测试用例运行
在测试片段 2 中,我有这两个测试用例
TC1:从 mongoDB 中获取用户数(使用 JSR223 Sampler)
TC2:使用 API 获取用户数
当第二个测试片段运行时,从 mongoDb 获取用户计数的测试用例与直接使用 API 获取计数的测试用例给出不同的计数。 API 正在谈论更新 mongoDB 中的数据的时间,因为可能有一些层需要时间来更新数据库中的数据(我不确定存在哪个层以及为什么它需要时间)。当我为单个用户运行脚本时,脚本工作正常,因此毫无疑问脚本有问题。
请有人建议我们可以在这里使用什么方法来获得相同的计数。
一个。添加定时器/延迟是一种好方法还是可以使用其他方法?
如果使用计时器/延迟是否也会影响性能测试报告,这些延迟是否会加到我们的性能测试报告中?
最佳答案
这可能是您面临的情况 race condition ,即当您使用一个线程从数据库执行读取操作时,该数字已被另一个线程更新。
选项在:
- 修改您的查询,使您的数据库检查针对特定用户。
- 使用Critical Section Controller确保您的数据库检查一次仅由 1 个线程执行
- 使用Inter-Thread Communication插件,以便根据特定条件实现跨线程同步。后者可以使用 JMeter Plugins Manager 安装
关于api - Jmeter 性能测试 - 使用 JSR223 采样器从 API 和从 MongoDB 获得的结果计数差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50062773/