使用CSV文件从中读取测试数据
我需要用100个用户测试一个站点的各种链接(无需登录),并使用JMeter将其循环若干次。我想把这些链接放在一个“CSV文件”中,这样所有要测试的链接都可以从文件中读取使用CSV文件从中读取测试数据,csv,jmeter,load-testing,jmeter-plugins,Csv,Jmeter,Load Testing,Jmeter Plugins,我需要用100个用户测试一个站点的各种链接(无需登录),并使用JMeter将其循环若干次。我想把这些链接放在一个“CSV文件”中,这样所有要测试的链接都可以从文件中读取 如何完成此任务?准备一种csv文件,其中包含测试参数列表,并使用它对测试采样器进行参数化,至少使用以下内容: 有关详细信息,请查看以下链接: Jmeter功能: , 采样器来自 1。在csv文件中准备您的测试URL,例如以下格式: url1 url2 ... urlN 确保测试
如何完成此任务?准备一种csv文件,其中包含测试参数列表,并使用它对测试采样器进行参数化,至少使用以下内容:
- ,
1。在csv文件中准备您的测试URL,例如以下格式:
url1
url2
...
urlN
确保测试URL不包含http://
前缀(根据->服务器)
2.对脚本使用模式,如下所示:
CSV Data Set Config:
Filename: [path to your csv-file with test-urls]
Variable Names: testURL
Recycle on EOF?: True
Stop thread on EOF?: False
Sharing mode: Current thread
Thread Group:
Number of Threads: N
Loop Count: M
HTTP Request // your http call
Server Name or IP: ${testURL} // use variable with extracted URL
这将启动N个用户,每个用户将从测试URL列表中读取M个条目。如果M>测试URL列表中的条目数,则用户将在EOF上回收该列表。在其中一条注释中,提到每个循环不能多次读取CSV。您可以使用多个线程,每个线程读取CSV文件一次,但该文件已关闭,在下一个循环中不会被读取。此外,如果将CSV设置为“回收”,则CSV文件将被无限期地反复读取。因此,问题变成了如何将CSV文件循环一定次数而不是无限循环 我在另一篇帖子()中发布了我的答案,但我将复制并粘贴它,以防将来该链接不起作用
我找不到一个简单的解决办法。我最终使用了beanshell脚本,它让您可以使用非常类似于java的代码来完成一些定制工作。我制作了一个JMeter项目示例来演示如何执行此操作(是的,考虑到我只想重复CSV读取,它非常复杂):
JMeterExample
|
⊢--JMeterTests.jmx // the JMeter file
⊢--example.csv // the CSV file
我的CSV的内容:
guest-id-1,"123 fake street",
guest-id-2,"456 fake street",
guest-id-3,"789 fake street",
在这个线程组中,我只需要一个用户,我将循环两次。我打算每个CSV行发送一个请求。所以总共应该发送6个请求
csv\u line\u 0
的变量,第二行将存储为csv\u line\u 1
,依此类推。我知道这不是一个干净的解决方案但是。。。我找不到任何干净简单的方法来完成这个干净简单的任务。我在下面复制并粘贴了我的代码
import org.apache.jmeter.services.FileServer;
导入java.text.*;
导入java.io.*;
导入java.util.*;
字符串temp=null;
ArrayList行=新的ArrayList();
BufferedReader bufRdr;
ArrayList strList=新的ArrayList();
//获取文件
试一试{
//如果csvFilePath是绝对路径,则可以使用下面的这一行
//File File=新文件(${csvFilePath});
//如果csvFilepath是相对路径,则可以使用下面这一行,相对于保存此JMeter文件的位置
File File=新文件(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir()+“/”+${csvFilePath});
如果(!file.exists()){
抛出新异常(“错误:文件“+文件名+”未找到”);
}
bufRdr=新的BufferedReader(新的InputStreamReader(新文件InputStream(文件),“UTF8”);
}捕获(例外e){
log.error(“加载文件失败”);
log.error(例如getMessage());
返回;
}
//对于每个CSV行,将其保存到变量中
int计数器=0;
while(true){
试一试{
temp=bufRdr.readLine();
如果(temp==null | | temp.equals(“”){
打破
}
行。添加(临时);
变量输入(“csv_行_”+字符串值(计数器),温度);
计数器++;
}捕获(例外e){
log.error(“获取下一行失败”);
log.error(例如getMessage());
打破
}
}
//存储循环计数器的CSV行数
vars.put(“linescont”,String.valueOf(lines.size());
${linescont}
是CSV行数的计数,根据上述beanShell脚本计算得出
\uujm\uuuu loopController\uuuu idx
是JMeter为您定义的变量,是循环控制器的索引。变量名为\uujm\uuu{loop controller name}\uuuuidx
String index=vars.get(“_jm__loopController__idx”);
字符串行=vars.get(“csv_行”+索引);
String[]tokens=line.split(“,”);
变价出售(“guestId”,代币[0]);
可变投入(“地址”,代币[1]);