一个项目中有很多接口,起初保存在 JMeter 中配置元件->自定义变量中,如下图:
虽然有调整顺序的功能,但是量大之后,查找维护起来还是很麻烦。
将这些接口信息放在 excel 中统一管理,如果有调整,直接编辑 excel 表格,排序、检索方便,如下图:
JMeter:5.0
JDK:1.8
Java 编辑软件:Eclipse MARS
现将表格中的数据读取到代码中,我这里使用的是数据保存,大家可以按照自己的习惯来写,由于使用的是 jxl.jar 读取 excel 表格,所以格式必须是 xls 后缀的,否则无法读取,代码如下:
/*输入流,声明读取变量is 用于读取excel表格*/
InputStream is=null;
/*构建Workbook对象*/
Workbook workbook=null;
/*传入path中描述的路径,读取到is中*/
is=new FileInputStream(path);
/*将is中读取到的excel表格赋值给workbook*/
workbook=Workbook.getWorkbook(is);
/*声明变量sheet,将workbook中的sheet名为sheetname的表格读取到sheet中*/
Sheet sheet=workbook.getSheet("APIList");
/*声明一个数组,用于存放sheet中的值,长度根据sheet中的实际长度定义*/
String cases[][] = new String[sheet.getRows()][sheet.getColumns()];
/*通过两层循环,将sheet中的数据读取到数组中*/
for(int i=0;i<sheet.getRows();i++){
for(int j=0;j<sheet.getColumns();j++){
/*声明一个单元格变量,通过getCell(j,i)得到单元格中的值,读取每列每行,getCell(j,i)前面的j是列,i是行*/
Cell cellA1=sheet.getCell(j,i);
/*如果当前单元格的格式是label(文本类型)类型的,就读取到数组中,注意:excel中所有内容需要保存成文本类型,包括数字*/
if (cellA1.getType().equals(CellType.LABEL)){
/*获取string类型单元格的数据*/
cases[i][j]=cellA1.getContents();
}
}
}
//将excel表关闭
workbook.close();
//将输入流关闭
is.close();
将读取出的数组 cases,循环读取到 JMeter 变量中,代码如下:
JMeterVariables vars = getVariables();
for(int i=1;i<cases.length;i++){
vars.put(cases[i][0],cases[i][1]);
}
完整方法代码如下:
public void import_apilist(String path) throws IOException, BiffException{
/*输入流,声明读取变量is 用于读取excel表格*/
InputStream is=null;
/*构建Workbook对象*/
Workbook workbook=null;
/*传入filepath中描述的路径,读取到is中*/
is=new FileInputStream(path);
/*将is中读取到的excel表格赋值给workbook*/
workbook=Workbook.getWorkbook(is);
/*声明变量sheet,将workbook中的sheet名为sheetname的表格读取到sheet中*/
Sheet sheet=workbook.getSheet("APIList");
/*声明一个数组,用于存放sheet中的值,长度根据sheet中的实际长度定义*/
String cases[][] = new String[sheet.getRows()][sheet.getColumns()];
/*通过两层循环,将sheet中的数据读取到数组中*/
for(int i=0;i<sheet.getRows();i++){
for(int j=0;j<sheet.getColumns();j++){
/*声明一个单元格变量,通过getCell(j,i)得到单元格中的值,读取每列每行,getCell(j,i)前面的j是列,i是行*/
Cell cellA1=sheet.getCell(j,i);
/*如果当前单元格的格式是label(文本类型)类型的,就读取到数组中,注意:excel中所有内容需要保存成文本类型,包括数字*/
if (cellA1.getType().equals(CellType.LABEL)){
/*获取string类型单元格的数据*/
cases[i][j]=cellA1.getContents();
}
}
}
//将excel表关闭
workbook.close();
//将输入流关闭
is.close();
JMeterVariables vars = getVariables();
for(int i=1;i<cases.length;i++){
//表格中一共三列,name,values,description,所以只将name和value读入数组,第0列一定是name,第1列是value
vars.put(cases[i][0],cases[i][1]);
}
}
说明:excel 表中一共三列,第一列接口名称(Name),第二列接口路径(Values),第三列接口描述(Description),格式固定好,sheet 名称为:APIList。
写好后,需要导出成 jar 包,来提供给 JMeter 使用,方法如下:
右键需要导出的类名,选择 Export...,选择导出路径后保存,如下图:
在 JMeter 调用时,有两种方法,一直接把所需要的 jar 包,放在 JMeter 目录中\lib\ext 里面,第二是将 jar 包放在某个地方,在计划中添加,如下图:
这里需要导入两个包,一个读取 excel 的包:jxl.jar,另一个是上面代码导出的包,importAPI.jar
在调用时,添加一个 BeanShell Sampler,写代码调用,代码如下:
import jmeterjar.*;
importAPI a= new importAPI();
a.import_apilist("E:\\work\\project\\测试\\data\\data_base.xls");
如下图:
说明:importAPI 是写在 jmeterjar 包下面的,所以引用的时候,需要导入包中的类,这里使用了星号导入了所有类,如下图:
在查看结果树中查看结果:
到此,excel 中的数据,已经导入到了 JMeter 中,后续请求,使用 ${变量名}可以调用。
反过来,使用 Java 读取 JMeter 中的变量,也是提供了接口,具体实现如下:
public String getJmeterV(String var){
JMeterVariables vars = getVariables();
String content = vars.get(var);
return content;
}
需要将 JMeter 中的变量名,当成字符串传入方法,如下图:
需要 jar 包请下载:
链接: https://pan.baidu.com/s/1BcLi56G7r12KwQR1fCoXwQ
提取码: ud2x
说明:使用 Java 代码,实现读取 JMeter 中的变量,使用这个:JMeterVariables 类,jxl.jar 包读取 excel,压缩包中包括: importAPI.jar,jxl.jar,一个 jmx 示例,一个 excel 示例,一个说明文档
需要源码,反编译一下就行,里面没啥东西