每个线程是否可以从CSV文件中选择相同的行?
例如。我的CSV文件中有5个用户,只有5个记录(行)。在每次迭代中,CSV的第一个值应分配给User1,类似于所有用户。
User1: myID1,pass1,item1,product1
User2: myID2,pass2,item2,product2
User3: myID3,pass3,item3,product3
User4: myID14,pass4,item4,product4
User5: myID15,pass5,item5,product5
。 。 有什么解决方案吗?
答案 0 :(得分:1)
如果您的CSV文件可以包含> 5行,你的测试可以有> 5个虚拟用户和需求如"用户1采用第1行和第34行;是必须的,您必须使用像Beanshell Sampler这样的脚本测试元素将CSV文件预加载到内存中:
添加Beanshell Sampler并将以下代码放入" Script"面积:
import org.apache.commons.io.FileUtils;
List lines = FileUtils.readLines(new File("test.csv"));
bsh.shared.lines = lines;
以上代码将读取test.csv
文件的内容(将其替换为CSV文件的相对路径或完整路径)并将其存储到bsh.shared namespace
将Beanshell PreProcessor作为请求的子项添加,您需要使用CSV文件中的值并将以下代码放入"脚本"面积:
int user = ctx.getThreadNum();
String line = bsh.shared.lines.get(user);
String[] tokens = line.split(",");
vars.put("ID", tokens[0]);
vars.put("pass", tokens[1]);
vars.put("item", tokens[2]);
vars.put("product", tokens[3]);
上面的代码将从列表中获取行,根据当前虚拟用户号存储在bsh.shared
命名空间中,用逗号分隔并将值存储到JMeter变量中,这样您就可以访问它们为:
${ID}
${pass}
${item}
${product}
有关在JMeter测试中使用Beanshell脚本的详细信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component指南。