Java接口自动化测试 — 使用Excel做数据驱动
Posted 向往远方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java接口自动化测试 — 使用Excel做数据驱动相关的知识,希望对你有一定的参考价值。
一、说明
- 数据驱动测试的核心:是测试数据与测试脚本分离,实现测试脚本的参数化,例如:在使用工具测试时,常常会使用到参数化设置;
- 使用数据驱动测试方便后期维护,提高脚本的可重用性;
- 做数据驱动的方式有多种例如:Excel、CSV、mysql等
二、使用Excel实现数据驱动
1、在pom文件添加POI依赖
<!--操作Excel数据-->
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
2、新建一个Class命名为ExcelUtils
package com.test.excel;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author lh
* @date 2020/7/3
* @description
*/
public class ExcelUtils {
/**
* 读取Excel数据
* @return List
* @throws Exception
*/
public static List<Map<String ,Object>> readExcle() throws Exception{
//用流的方式读取Excel文件
FileInputStream fis = new FileInputStream("C:\\\\Users\\\\Think\\\\Desktop\\\\test.xlsx");
//获取Excel工作簿
XSSFWorkbook xf = new XSSFWorkbook(fis);
//获取第一个sheet
XSSFSheet sheet = xf.getSheetAt(0);
//获取第一行
int firstRow = sheet.getFirstRowNum();
//获取最后一行
int lastRow = sheet.getLastRowNum();
// System.out.println(lastRow);
//用于map设置key值,自定义
String columns[] = {"username", "password"};
List< Map<String ,Object>> list = new ArrayList<>();
for (int i = 0;i<=lastRow;i++){
XSSFRow row = sheet.getRow(i);
if (row!=null){
//获取第一行,第一列
int firstcell = row.getFirstCellNum();
//获取最后一行,最后一列
int lastcell = row.getLastCellNum();
Map<String ,Object> map = new HashMap<>();
for (int j = 0;j<columns.length;j++){
XSSFCell cell = row.getCell(j);
if (cell == null){
continue;
}
//封装成map
map.put(columns[j], getCellFormatValue(cell));
}
//System.out.println(map);
//将map放入List
list.add(map);
}
fis.close();
xf.close();
}
return list;
}
//格式化数值类型
public static Object getCellFormatValue(Cell cell){
Object cellValue = null;
/**
* getCellTypeEnum()方法是枚举类型,用于判断单元格值类型,有以下五种格式:
* _NONE(-1),
* NUMERIC(0),
* STRING(1),
* FORMULA(2),
* BLANK(3),
* BOOLEAN(4),
* ERROR(5);
*/
switch(cell.getCellTypeEnum()){
case STRING:
cellValue = cell.getStringCellValue();
break;
case NUMERIC:
/**如果是数字类型转换成数字类型,但是初始化数字加的.0,因此可以转换成int类型去掉.0
* cell.getNumericCellValue()
*/
cellValue = new Double(cell.getNumericCellValue()).intValue();
break;
case BOOLEAN:
break;
case FORMULA:
break;
}
return cellValue;
}
//测试
public static void main(String[] arg) throws Exception{
ExcelUtils excelTest = new ExcelUtils();
excelTest.readExcle();
}
}
三、在测试用例中使用
- 在testng中使用需要新创建一个方法getDataMethod(),返回Object[][]类型
- 使用注解@DataProvider,为测试方法提供数据
- 在测试方法上使用@Test(dataProvider = "getDataMethod")接收数据
- 使用数据驱动有一个好处,测试方法可以写一个,根据参数频繁调用一个方法(和上一篇对比https://www.cnblogs.com/liho/p/13225137.html)
package com.test.httpclient;
import com.alibaba.fastjson.JSONObject;
import com.test.excel.ExcelUtils;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.List;
import java.util.Map;
/**
* @author lh
* @date 2020/6/8
* @description
*/
@Test
public class LoginCase {
HttpClientPost httpClientPost = new HttpClientPost();
@DataProvider
public Object[][] getDataMethod() throws Exception{
//读取Excel中的数据
List<Map<String,Object>> result = ExcelUtils.readExcle();
Object[][] params = new Object[result.size()][];
for (int i = 0; i < result.size(); i++) {
params[i] = new Object[]{result.get(i)};
}
return params;
}
@BeforeTest
public void setup(){
System.out.println("用例执行前执行");
}
//一个测试方法
@Test(dataProvider = "getDataMethod")
public void test1(Map<String, Object> param) throws Exception {
JSONObject result = httpClientPost.LoginPost(param);
Assert.assertEquals(result.get("code"),200);
}
@AfterTest
public void teardown(){
System.out.println("用例执行完后执行");
}
}
四、查看运行结果
以上是关于Java接口自动化测试 — 使用Excel做数据驱动的主要内容,如果未能解决你的问题,请参考以下文章
Java 使用POI操作EXCEL及测试框架搭建测试开发的一些想法