利用空闲之余,写了第一个接口自动化测试demo, 通过读取execl中的接口测试用例,接口自动执行。(这里跟很多网上的接口自动化有点不同的是:无需再写代码,只需要从execl中增加用例,就可执行)。
这是execl的模板:
这个模板可以很好的管理项目的各个模块,看起来也是简洁,也是颇为喜欢的~~
主要就是写了这几个类,完成了接口自动化的第一步:
在尝试写这个demo时,最大的问题困扰的我是:每个请求的参数方式(请求参数和body参数)不一致,个数不一致。怎样能用简洁的方式实现? 最终解决的办法就是:
在execl中增加参数类型判断:paramType, 如果是params,封装一个将json格式的字符串转换成map格式,如果是body, 就直接使用execl中的json格式。
好了,上代码(只是简单的实现,还没有很多处理,如果你们有幸看到,可以自己在这个基础上改进完善,我也会一直完善这个框架,嘻~~)
首先是util:
execlUtil:读取execl数据
package utils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelUtils {
Sheet sheet = null;
Row row = null;
List<Map<String,String>> list = null;
String cellData = null;
String filePath =System.getProperty("user.dir")+"/XapiCaseData/ScooperApiTestCase.xlsx";
String columns[] = {"caseName","caseDescription","isRun","baseURI","path","method","paramType","params"};
Workbook wb = readExcel(filePath);
/**
* 获取excel的sheet的数量
*/
public int getSheetNum(){
return wb.getNumberOfSheets();
}
/**
* 获取excel的sheet[]的名字
*/
public String getSheetName(int i){
return wb.getSheetName(i);
}
/**
* 读取sheet里的接口用例参数:
"caseName","caseDescription","isRun","baseURI","path","method","paramType","params"
* @param sheetNum
* @return List
*/
public List<Map<String,String>> getTestData(int sheetNum) {
//获取sheet
sheet = wb.getSheetAt(sheetNum);
if(wb != null){
//用来存放表中数据
list = new ArrayList<Map<String,String>>();
//获取最大行数
int rownum = sheet.getPhysicalNumberOfRows();
//获取第一行
row = sheet.getRow(0);
//获取最大列数
int colnum = row.getPhysicalNumberOfCells();
//循环遍历各个sheets的行和列值添加到List集合
for (int i = 1; i < rownum; i++) {
Map<String, String> map = new LinkedHashMap<String, String>();
row =