首页 > 编程语言 >java接口自动化测试实战002----测试数据封装及ExcelUtil优化

java接口自动化测试实战002----测试数据封装及ExcelUtil优化

时间:2023-12-22 21:37:20浏览次数:46  
标签:java String Object ---- 002 parameter public datas 读取

一、利用testNG测试框架进行封装

1、封装实现

新建测试类,类中新增多个方法,每个方法存储一条测试数据并调用HttpUtl类中的doGet或doPost方法。缺点:代码复杂、繁琐,且不适用测试数据量大的情况。

2、封装步骤

(1)maven的pom.xml文件中添加testNG测试框架的依赖,如下所示:

 <!-- https://mvnrepository.com/artifact/org.testng/testng -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.8</version>
            <scope>test</scope>
        </dependency>

(2)testNG配置文件中配置测试类,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test thread-count="5" name="Login">
    <classes>
      <class name="testInterface.test_V1.login_v11"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

(3)新建在testNG配置文件中配置的测试类,并进行数据封装,每条数据对应一个测试方法 ,如下所示:

public class login_v1 {
    @Test
     public void login_1() {
         String url="http://127.0.0.1:58088/api/user/smsCodeLogin";
         String mobile="13205869415";
         String smsCode="9999";
          Map<String,String> parameter=new HashMap<String,String>();
          parameter.put("mobile",mobile);
          parameter.put("smsCode",smsCode);
          HttpUtil1.doPost(url,parameter);
     }
    @Test
     public void login_2() {
         String url="http://127.0.0.1:58088/api/user/smsCodeLogin";
         String mobile="123";    //手机号错误
         String smsCode="9999";
          Map<String,String> parameter=new HashMap<String,String>();
          parameter.put("mobile",mobile);
          parameter.put("smsCode",smsCode);
          HttpUtil1.doPost(url,parameter);
     }
    @Test
     public void login_3() {
         String url="http://127.0.0.1:58088/api/user/smsCodeLogin";
         String mobile="13205869415";
         String smsCode="11";   //密码错误
          Map<String,String> parameter=new HashMap<String,String>();
          parameter.put("mobile",mobile);
          parameter.put("smsCode",smsCode);
          HttpUtil1.doPost(url,parameter);
     }
}

 

二、利用testNG的DataProvider进行数据封装

1、封装实现

   新建一个保存数据的方法,在方法中利用数组存储测试数据并返回数组格式数据。再使用testNG中的DataProvider进行数据调用。缺点:不适于存储测试数据的数据量比较大或字段项比较多的情况。

2、实现步骤

  • 新建一个保存数据的datas方法,在方法中利用数组存储测试数据并返回数组格式数据;
  • 通过在保存数据的方法上添加@DataProvider和在测试方法上添加@Test(dataProvider=”datas”进行数据调用,如下所示:
public class login_v2 {
    @Test(dataProvider="datas")
     public void login(String mobile,String smsCode) {
        String url="http://127.0.0.1:58088/api/user/smsCodeLogin";
          Map<String,String> parameter=new HashMap<String,String>();
          parameter.put("mobile",mobile);
          parameter.put("smsCode",smsCode);
          HttpUtil1.doPost(url,parameter);
     }
    @DataProvider
    public Object[][] datas(){
        Object[][] datas= {
                {"13265626352","6666"},
                {"","6666"},
                {"12345689562","6666"},
                {"13265","6666"},
                {"13203890553","6666"},
                {"13265626352","7777"},
                {"13265626352",""},
        };
        return datas;
    }
}

 

三、通过EXCEL表格存储测试数据进行封装

1、封装实现

 将测试数据存储在EXCEL表格,通过POI技术读取EXCEL表格文件中的测试数据实现数据的调用。

2、实现步骤

(1)在EXCEL表格设计测试数据,并将其放入项目src/test/resources目录下,如下图所示:

 

 

(2)在Maven的配置文件pom.xml中配置poi对应的依赖,如下所示:

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

(3)新建读取文件的类ExcelUtil类,编写相应代码,读取EXCEL表格文件中的测试数据,如下所示:

public class ExcelUtil_1 {
  public static Object[][] getDatas(){
      String excelPath="src/test/resources/测试用例_V1.xlsx";
      //新建二维数组存储读取的数据,二维数组创建:object[][] datas=new Object[7][2];
      Object[][] datas=null;
      try {
        //获取workbook对象
        Workbook workbook=WorkbookFactory.create(new File(excelPath));
        //获取Sheet对象
        Sheet sheet=workbook.getSheet("Sheet1");
        datas=new Object[7][2];
        for (int i =1; i <=7; i++) {
            //获取行
            Row row=sheet.getRow(i);
            for (int j = 5; j <=6; j++) {
            //获取列,并指定单元格数据为空的策略,否则单元格为空时,会报空指针异常。
            Cell cell=row.getCell(j,MissingCellPolicy.CREATE_NULL_AS_BLANK);
            //将列设置为字符串类型
            cell.setCellType(CellType.STRING);
            //获取单元格数据
            String value=cell.getStringCellValue();
            //将单元格数据存储到数组中
            datas[i-1][j-5]=value;            
            }    
        }    
    } catch (Exception e) {
        e.printStackTrace();
    }
    return datas;  
  }
  
  //验证读取函数是否可以成功读取。
    /*
     * public static void main(String[] args) { 
     * Object[][] data=getDatas();
     *  for(Object[] objects : data) {
     *   System.out.print("["+objects+"]\n");
     *    for (Object object : objects) { 
     *    System.out.print("["+object+"]\n");
     *     }
     *   }
     * }
     */
}

(4)在之前存储数据的函数datas中调用读取类ExcelUtil类对应的函数datas,如下所示:

public class login_v3 {
    //调用ExcelUtil_1
    @Test(dataProvider="datas")
     public void login(String mobile,String smsCode) {
        String url="http://127.0.0.1:58088/api/user/smsCodeLogin";
          Map<String,String> parameter=new HashMap<String,String>();
          parameter.put("mobile",mobile);
          parameter.put("smsCode",smsCode);
          HttpUtil1.doPost(url,parameter);
     }
    @DataProvider
    public Object[][] datas(){
        Object[][] datas= ExcelUtil_1.getDatas();
        return datas;

    } 
}

 

四、读取文件类优化之处理表格中数据行列不固定且连续

1、实现思想

     当需要读取测试文件中数据的行列连续且不固定时,我们可以将开始的行列和结束的行列以及文件路径以参数的形式传入读取文件函数中,在调用此函数时再设置开始的行列和结束的行列。

2、实现步骤

  (1)修改读取文件函数,以参数的形式传入开始的行列和结束的行列以及文件路径,如下所示:

public class ExcelUtil_2 {
    //读取连续行列表格文件,传入开始的行列索引
  public static Object[][] getDatas(String excelPath,int rowStartNum,int rowEndNum,int cellStartNum,int cellEndNum){
      
      //新建二维数组存储读取的数据,二维数组创建:object[][] datas=new Object[7][2];
      Object[][] datas=null;
      try {
        //获取workbook对象
        Workbook workbook=WorkbookFactory.create(new File(excelPath));
        //获取Sheet对象
        Sheet sheet=workbook.getSheet("Sheet1");
        datas=new Object[rowEndNum-rowStartNum+1][cellEndNum-cellStartNum+1];
        for (int i =rowStartNum; i <=rowEndNum; i++) {
            //根据行索引获取行
            Row row=sheet.getRow(i); //函数中传入的是索引值 ,所以此处不需要减1
            for (int j =cellStartNum; j <=cellEndNum; j++) {
            //根据列索引获取列,并指定单元格数据为空的策略,否则单元格为空时,会报空指针异常。
            Cell cell=row.getCell(j,MissingCellPolicy.CREATE_NULL_AS_BLANK);
            //将列设置为字符串类型
            cell.setCellType(CellType.STRING);
            //获取单元格数据
            String value=cell.getStringCellValue();
            //将单元格数据存储到数组中
            datas[i-rowStartNum][j-cellStartNum]=value;            
            }    
        }    
    } catch (Exception e) {
        e.printStackTrace();
    }
    return datas;  
  }

(2)修改数据提供者中的函数调用形式,如下所示:

    @DataProvider
    public Object[][] datas(){
        String excelPath="src/test/resources/测试用例_V1.xlsx";
        Object[][] datas= ExcelUtil_2.getDatas(excelPath,1,7,5,6);//传入开始和结束的行列索引,注意不是行列号
        return datas;
    }

 

五、读取文件类优化之处理表格中数据行列不连续情况

1、实现思想

当需要读取测试文件中数据的行列不连续时,我们可以读取函数中传入的开始行列和结束行列换为行数组和列数组,然后将要调用的行列存储到数组中,在调用读取函数时直接传入对应的数组。

2、实现步骤

(1)修改读取文件函数,以参数的形式传入行数组和列数组以及文件路径,如下所示:

public static Object[][] getDatas(String excelPath,String Sheetname ,int[] rowNum,int[] cellNum){
      
      //新建二维数组存储读取的数据,二维数组创建:object[][] datas=new Object[7][2];
      Object[][] datas=null;
      try {
        //获取workbook对象
        Workbook workbook=WorkbookFactory.create(new File(excelPath));
        //获取Sheet对象
        Sheet sheet=workbook.getSheet(Sheetname);
        datas=new Object[rowNum.length][cellNum.length];
        for (int i =0; i <rowNum.length; i++) {//注意去掉=
            //获取行
            Row row=sheet.getRow(rowNum[i]);//获取的是数组中的行索引
            for (int j =0; j <cellNum.length; j++) {
            //获取列,并指定单元格数据为空的策略,否则单元格为空时,会报空指针异常。
            Cell cell=row.getCell(cellNum[j],MissingCellPolicy.CREATE_NULL_AS_BLANK);
            //将列设置为字符串类型
            cell.setCellType(CellType.STRING);
            //获取单元格数据
            String value=cell.getStringCellValue();
            //将单元格数据存储到数组中
            datas[i][j]=value;            
            }    
        }    
    } catch (Exception e) {
        e.printStackTrace();
    }
    return datas;  
  }

(2)在数据提供者中建立行数组和列数组存储要调用的行和列,并在调用时传入建立的数组,如下所示:

    @DataProvider
    public Object[][] datas(){
        String excelPath="src/test/resources/测试用例_V1.xlsx";
        int rowNum[]= {1,2,3,4,5,6,7};
        int cellNum[]= {5,6};
        Object[][] datas= ExcelUtil_3.getDatas(excelPath,"Sheet1",rowNum,cellNum);
        return datas;
    }  

 

六、总结

1、内容概要

  • 一条数据一个测试方法
  • 使用数据提供者,数组存储测试数据
  • 使用数据提供者,Excel存储数据
  • 读取文件类优化之处理表格中数据行列连续
  • 读取文件类优化之处理表格中数据行列不连续情况

2、各种封装数据比较

  • 一组用例一个测试方法:
  • 利用测试提供者方法:测试数据写在测试代码中,耦合严重
  • EXCEL存储数据:将测试提供者方法中的数据放到表格中再进行读取获取。

标签:java,String,Object,----,002,parameter,public,datas,读取
From: https://www.cnblogs.com/geqiandeqingmu/p/13367283.html

相关文章

  • java接口自动化测试实战004----分表存储接口信息和用例信息之CaseUtil和RestUtil
    一、分表存储用例信息和接口信息1、实现思想  将用例相关信息存储在用例表单中,将接口信息存储在接口信息表单中,创建对应的类存储表单中的信息。2、实现步骤(1)修改表格文件,分表存储用例信息和接口信息,如下图所示:     (2)修改ExcelUtil中的读取函数datas,让表单名称......
  • 12.22
    好像去北京的明天就回来了。......
  • python基础007----递归函数&闭包&装饰器
    一、递归函数1、递归函数概念    直接或间接的调用自身的函数,称为递归函数。每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件。2、递归函数实例#####递归函数######1、普通实现:计算n!=1*2*3*4*5*6*...*nn=int(input('普通实现阶乘,......
  • 反射
    一、反射概述反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。Appleapple=newApple();//直接初始化,「正射」apple.setP......
  • linux基础01----命令集锦
    Linux命令集锦:一、关机&重启命令:   sync:把内存的数据同步到磁盘,当我们关机或者重启时,都应该先执行下sync命令,把内存的数据写入磁盘,防止数据丢失。   shutdown-hnow:表示立即关机   shutdown-h 1:表示1分钟后关机    shutdown-rnow:立即重启 ......
  • 003元素定位方式与项目demo创建
    一、环境搭建1、创建项目,添加java-client依赖包             新建maven项目,引入java-client依赖包       2、创建并编写代码 测试运行以上代码,运行前需打开Appnium.Appnium没有打开时,运行会报错:Connectionrefused:connect 二、......
  • linux-firewalld 和iptable的策略配置(nat 以及端口开放)
    一、配置防火墙开发端口1、sudoyuminstallfirewalldsudosystemctlstartfirewalldsudosystemctlenablefirewalld2、配置防火墙规则firewall-cmd--permanent--add-service=sshfirewall-cmd--permanent--add-service=httpfirewall-cmd--permanent......
  • linux基础002-----环境搭建1
    一、               vimtools安装    在终端输入gcc-v如果显示gcc的版本说明安装了gcc  之后一直回车          关闭系统后,在虚拟机中找到要克隆的系统,右键---管理---克隆,选择克隆的位置(选择大的磁......
  • Python+Selenium框架实战系列003----测试数据分离与ddt技术&断言
    一、测试数据分离1、新建testData文件夹,新建login_data.py文件,如下所示:   2、在login_datas.py文件中存放测试用例数据,如下所示:#正常场景success_data={"mobile":"17839196010","pwd":"duhui94619"}#异常用例--手机号异常phone_data=[{"mobile":&......
  • python自动化学习笔记5-----allure测试报告
    1、运行测试报告 2、allure注解的使用  3、优化测试报告之添加对应的标签 4、注解的使用     5、yaml文件格式 6、更改logo(1)allure目录下找到allure.yml的文件,增加插件    (2)在插件目录下添加要展示的图片    (3)修改styles.cs......