接口测试 使用 Java 读写 JMeter 中的变量

喵喵 · 2020年07月22日 · 最后由 Wan 回复于 2020年07月31日 · 2244 次阅读

1. 使用 Java 写入 JMeter 中的变量

1.1 需求

一个项目中有很多接口,起初保存在 JMeter 中配置元件->自定义变量中,如下图:

虽然有调整顺序的功能,但是量大之后,查找维护起来还是很麻烦。

1.2 思路

将这些接口信息放在 excel 中统一管理,如果有调整,直接编辑 excel 表格,排序、检索方便,如下图:

1.3 环境准备

JMeter:5.0

JDK:1.8

Java 编辑软件:Eclipse MARS

1.4Java 代码实现

1.4.1 读取表格数据

现将表格中的数据读取到代码中,我这里使用的是数据保存,大家可以按照自己的习惯来写,由于使用的是 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();   

1.4.2 保存到 JMeter 变量中

将读取出的数组 cases,循环读取到 JMeter 变量中,代码如下:

JMeterVariables vars = getVariables();
         for(int i=1;i<cases.length;i++){
            vars.put(cases[i][0],cases[i][1]);  
        }

1.4.3 整体代码

完整方法代码如下:

 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。

1.4.4 导出为 jar 包

写好后,需要导出成 jar 包,来提供给 JMeter 使用,方法如下:

右键需要导出的类名,选择 Export...,选择导出路径后保存,如下图:

1.5JMeter 调用

在 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 中,后续请求,使用 ${变量名}可以调用。

2.读取 JMeter 中的变量,提供给 Java 代码使用

反过来,使用 Java 读取 JMeter 中的变量,也是提供了接口,具体实现如下:

2.1Java 代码实现

public String getJmeterV(String var){
  JMeterVariables vars = getVariables();
  String content = vars.get(var);
  return content;
}

2.2JMeter 调用

需要将 JMeter 中的变量名,当成字符串传入方法,如下图:

需要 jar 包请下载:

链接: https://pan.baidu.com/s/1BcLi56G7r12KwQR1fCoXwQ

提取码: ud2x

说明:使用 Java 代码,实现读取 JMeter 中的变量,使用这个:JMeterVariables 类,jxl.jar 包读取 excel,压缩包中包括: importAPI.jar,jxl.jar,一个 jmx 示例,一个 excel 示例,一个说明文档

需要源码,反编译一下就行,里面没啥东西

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞
喵喵 关闭了讨论 07月22日 14:57
喵喵 重新开启了讨论 07月22日 15:06

学到了 大佬

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册