【发布时间】:2015-08-27 03:38:28
【问题描述】:
我正在使用 jmeter 测试我的 REST API 的 10000 次命中,每个 http 命中都会在数据库中存储一些数据。我遵循了以下测试计划
我正在并行运行 10 个线程,每个线程的加速时间为 20 秒,循环 1000 以实现相同的效果。
但这里的问题是我的线程没有采用唯一的数据集。而我的后端 HTTP URL 期望每个 http 命中的唯一字符串。
现在我尝试了以下方法。
具有 10000 个唯一值的单个 CSV 数据集配置,并且线程组中的所有线程都在读取相同的数据。
为每个线程设置不同的 CSV 数据,并使用 filename${__threadNum}.csv 为线程分配 csv 文件
使用 jmeter _RandomString 方法在运行时为每个 http 命中生成随机字符串,在我传递的 http 帖子正文中
{"tenantName":"${__RandomString(15,abcdefghijklmnofqrst1234567#@#%^&*,)}"}
- 使用 BeanShell 预处理器调用 java 方法并始终生成唯一模式 win HTTP 请求采样器。
现在上述方法都不适合我。在某个时间点后运行测试计划时,2 个线程试图使用相同的数据并点击我的 HTTP url。我从 http 响应中得到冲突错误。我的错误数不断增加。
现在我真的不明白这 2 个线程如何尝试使用相同的数据访问 http?
谁能解释一下这个问题并帮助我设置正确的测试计划配置。
编辑:
所有线程的CSV数据集配置:
HTTP 请求:
使用 CSV 数据集添加测试计划:
【问题讨论】:
-
解决了吗?如果是,那么如何,你能分享解决方案吗?
-
sharing mode = all threads应该为每次迭代提供唯一值。例如,如果有两个线程,那么线程 1 将读取第一个条目,线程 2 读取第二个条目,然后在下一次迭代中,线程 1 将读取第三个条目,线程 2 读取第四个条目,依此类推。
标签: java multithreading jmeter load-testing