jmeter beanshell 从文件中获取随机参数

时间:2021-07-16 21:41:51

loadruner 参数化有个功能,可以设置在脚本每次出现参数时,自动更换参数值。在做jmeter自动化测试过程中,同一个请求中出现多个参数值,如一个接口可以添加n个信息的请求

[
{
    "name": "baidu",
    "url": "http://www.baidu.com",
    "page": 88,
    "isNonProfit": true
},
{
    "name": "google",
    "url": "http://www.google.com",
    "page": 88,
    "isNonProfit": true
},
{
    "name": "163",
    "url": "http://www.163.com",
    "page": 88,
    "isNonProfit": true
}
]

把name,url ,page ,isNonProfit 参数化,但是这参数实际发送请求的时候都会重复,即如果name 参数选择的是baidu,其他集体记录也是baidu。所以jmeter 原来的配置参数功能无法满足这个需求,只有修改使用beanshell 先从文本中随机读取n条参数(这里的n是3).beanshell脚本为:

// 读文本文件
public static String lineContent(int lineNumber) throws IOException {
    File file = new File("D:/jscript/bid.txt");//文件路径
    FileReader fileReader = new FileReader(file);
    InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
    BufferedReader reader = new BufferedReader(isr);
    String txt = "";
    int lines = 0;
    String content = "";
    while (txt != null) {
        lines++;
        txt = reader.readLine();
        if (lines == lineNumber) {
            content = txt;
        }
    }
    reader.close();
    fileReader.close();
    return content;
}
// 获取随机数
public static int getRand(int max, int min) {
    Random random = new Random();
    return random.nextInt(max) % (max - min + 1) + min;
}

public static ArrayList getParameters() throws IOException{
    ArrayList list=new ArrayList();
    while (list.size() != 3) {
        int lineNumber = getRand(2330, 2); // 参数文件最大行数为2330 
        String lineContent = lineContent(lineNumber);
        if (!list.contains(lineContent)) {
            list.add(lineContent);
        }
    }
   return list;
}
//开始执行的地方
ArrayList list  = getParameters();
for(int i=0;i<list.size();i++){
    String line = list.get(i);
    String[]  item = line.split("\\t");
     System.out.println(item[2]);
     vars.put("name"+String.valueOf(i),item[0]);
     vars.put("url"+String.valueOf(i),item[1]);
     vars.put("page"+String.valueOf(i),item[2]);
     vars.put("isNonProfit"+String.valueOf(i),item[3]);

}

这样就可以在脚本请求中设置参数为:

[
{
    "name": "${name0}",
    "url": "${url0}",
    "page": ${page0},
    "isNonProfit": ${isNonProfit0}
},
{
    "name": "${name1}",
    "url": "${url1}",
    "page": ${page1},
    "isNonProfit": ${isNonProfit1}
},
{
    "name": "${name2}",
    "url": "${url2}",
    "page": ${page2},
    "isNonProfit": ${isNonProfit2}
}
]

  这样,每条记录都不一样了。满足了测试的需要。

欢迎关注公众号:

jmeter beanshell 从文件中获取随机参数