如何在JMeter中用CSV数据结合Parallel Controller实现并行SFTP Get?
实现Parallel Controller并行读取CSV不同账号执行SFTP Get的方法
方法1:提前加载所有CSV数据到全局属性
- 在测试计划最顶部添加Setup Thread Group(仅运行1次,用于初始化数据)
- 在Setup线程组内添加
CSV Data Set Config,配置你的CSV文件路径、列分隔符,设置Recycle on EOF?为False、Stop thread on EOF?为False - 再添加一个
JSR223 Sampler,用Groovy脚本把所有账号数据存入JMeter全局属性(全局属性可被所有线程/控制器共享):// 替换为你的CSV实际路径,或通过vars.get("csv_file")引用CSV配置里的路径变量 def csvFile = new File("/path/to/your/users.csv") def lines = csvFile.readLines().drop(1) // drop(1)跳过表头,没有表头可删除 lines.eachWithIndex { line, idx -> def account = line.split(",") // 按你的CSV分隔符调整,比如\t对应制表符 props.setProperty("user_${idx+1}_name", account[0].trim()) props.setProperty("user_${idx+1}_pwd", account[1].trim()) } props.setProperty("total_accounts", lines.size().toString()) - 在Parallel Controller内添加与CSV账号数相同的SFTP Request Sampler,每个Sampler引用对应属性:
- 第一个Sampler:用户名填
${__P(user_1_name,)},密码填${__P(user_1_pwd,)} - 第二个Sampler:用户名填
${__P(user_2_name,)},密码填${__P(user_2_pwd,)},以此类推
- 第一个Sampler:用户名填
方法2:循环控制器+计数器搭配CSV读取
- 在Parallel Controller外层添加Loop Controller,循环次数设为CSV中的账号总数
- 在Loop Controller内添加
Counter元件:起始值1,增量1,最大值设为账号总数,变量名设为user_idx - 再添加
CSV Data Set Config,配置文件路径与分隔符,设置Sharing Mode为Current thread group,Recycle on EOF?为False,Stop thread on EOF?为False,变量名设为username,password - 将Parallel Controller放到Loop Controller内部,SFTP Request Sampler直接引用
${username}和${password}即可。每次循环CSV会读取一行新账号,Parallel Controller用当前账号执行并行操作
方法3:直接用函数读取CSV指定行
如果账号数量较少,可直接在每个SFTP Sampler中用__CSVRead函数读取指定行:
- 第一个Sampler:用户名
${__CSVRead(/path/to/your/users.csv,0)},密码${__CSVRead(/path/to/your/users.csv,1)} - 第二个Sampler:用户名
${__CSVRead(/path/to/your/users.csv,0,next)},密码${__CSVRead(/path/to/your/users.csv,1)} - 后续Sampler重复添加
next参数即可逐行读取,函数中数字0、1对应CSV的列索引(从0开始)
内容的提问来源于stack exchange,提问作者deb97
相关产品推荐
相关产品推荐

