一个项目中有很多接口,起初保存在 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 示例,一个说明文档
需要源码,反编译一下就行,里面没啥东西