multithreading - JMeter 防止任何用户同时在不同线程上运行
问题描述
我正在使用一个包含 20 个线程的线程组,这些线程将同时运行。每个线程必须有一个来自 CSV 文件中 20 个用户列表的唯一用户。所以基本上我需要每个线程加载一个用户并使用同一个用户多次迭代测试计划(Task1 -> Task2 -> Task3)。
我需要在 JMeter 上执行以下操作:
(场景一)
线程1:用户1:任务1->任务2->任务3,用户1:任务1->任务2->任务3,用户1:任务1->任务2->任务3,...
线程2:用户2:任务1->任务2->任务3,用户2 :任务1->任务2->任务3,用户2:任务1->任务2->任务3,...
线程 N:UserN:Task1->Task2->Task3,UserN:Task1->Task2->Task3,UserN:Task1->Task2->Task3,...
但是我一直无法弄清楚如何做到这一点。每次我运行测试时,所有线程似乎都会在遍历 CSV 文件时选择用户,并将用户混合到同时在两个不同线程上找到用户的地步。
像这样:
(情景 2)
线程1:用户1:任务1->任务2->任务3,...,用户2:任务1->任务2->任务3,用户3:任务1->任务2->任务3
线程2:用户2:任务1->任务2->任务3,...,用户4:任务1->任务2->任务3,用户3:任务1->任务2->任务3
线程 N:UserN:Task1->Task2->Task3,...,User1:Task1->Task2->Task3,User2:Task1->Task2->Task3
关于为什么会发生这种情况以及如何实现第一个场景的任何想法?
解决方案
那么您想要的是将每个 CSV 行分配给线程一次吗?我认为可以通过下一个算法来实现:
- 使用 groovy script( )创建
setUp Thread Group
(1 个线程,1 个循环)JSR223 Sampler
。将 CSV 文件读取到行/对象,将每个放入 numbered 属性(行的索引将被视为线程号) - 在主线程组中添加另一个 groovy 脚本作为第一个采样器,读取索引属性并将其分配给常规变量。
这是上述两个步骤的实现。我使用groovycsv将 CSV 解析为对象(不要忘记将额外的库放入lib/ext
. 有下一个文件users.csv
:
username,password
user1,password1
user2,password2
user3,password3
user4,password4
脚本:
- 步骤1:
// setUp Thread Group > groovy JSR223 Sampler
import static com.xlson.groovycsv.CsvParser.parseCsv
List users = parseCsv(new File("users.csv").text).findAll()
// you can even shuffle them
// Collections.shuffle(users)
users.eachWithIndex { user, i -> props.put("USER_${i}", user) }
// now we have properties named 'USER_0', 'USER_1', 'USER_2'... 'USER_N'
- 第2步:
// main thread group > groovy JSR223 Sampler
// 1st thread will always read 'USER_0' property, 2nd 'USER_1' and so on
def user = props.get("USER_${ctx.threadNum}")
vars.put('USERNAME', user.username)
vars.put('PASSWORD', user.password)
// now all next samplers in thread group can use 'USERNAME' and 'PASSWORD' variables, like ${USERNAME}
//test that once selected user sticks to same thread
log.info("Thread num: ${ctx.threadNum}, user: ${user}")
希望能帮助到你。
推荐阅读
- reactjs - 无法将新值推送到 prevState 数组
- python - SQL 多对一数据检索(可变数量的虚拟列?)
- android - 如何将布局行为添加到扩展浮动操作按钮
- native - 如何在运行时使用本机支持建立 Agroal 连接
- javascript - 如何向此 JavaScript 函数添加超时参数?
- vector - 如何计算测试和训练文档之间的相似度
- machine-learning - Autokeras 的 AutoModel 和 GraphAutoModel 需要说明
- excel - 如果单元格“A500”在屏幕上可见/则运行 Excel 宏
- sass - webpack 4 sass-loader 无法解析全局 SCSS 变量
- javascript - 不可分配给类型'IntrinsicAttributes(React.js 和 TypeScript.js)