之前一片文章很浅的试了下接口测试的代码,今天就正式开始搞吧,正好给公司现在的一个后台系统写了个大概的框架,屏掉一些敏感信息,把代码及思路写出来供大家参考下。
工具:
Maven添加依赖
httpclient 处理请求
poi 处理接口报文
json 转化poi读取到的数据
最后项目大概是这样子
Now,Show Time!
关于接口自动化应该怎么来写,这个我认为你要先分析你的excel文件怎么写。之后顺着这个线头慢慢的往外抽。
既然是自动化的,那我们肯定是希望程序帮我们完成请求的组装,响应的写入及校验,测试结果的写入,那么我们表格的骨架就出来了。见下图(敏感信息模糊处理了)
现在数据有了,可以着手项目的编写啦!
创建过程就不再赘述了,直接创建之后再pom文件中添加下面的依赖。有个小插曲说一下,有心的朋友已经发现poi依赖用的是poi-ooxml,之所以用这个是因为我的excel文件是xlsx后缀的,所以只能用org.apache.poi.xssf这个包,至于其他后缀用什么可以参考下我之前写的关于poi的文字。
org.apache.httpcomponents
httpclient
4.5
org.apache.httpcomponents
httpcore
4.4.6
org.json
json
20180130
org.apache.poi
poi-ooxml
3.17
现在可以开始项目了,因为我们要处理excel数据给httpclient处理,所以就涉及到将string数据转化为json数据,以及处理excel读写,所以我们这里要先写三个工具类:ExcelUtil、httpclientUtil、ExcelUtil
publicclass ExcelUtil {
public String read(String filepath, intsheetNum, introwNum, intcellNum) throws FileNotFoundException, IOException{
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(filepath));
XSSFSheet sheet = workbook.getSheetAt(sheetNum);
XSSFRow row = sheet.getRow(rowNum);
XSSFCell cell = row.getCell(cellNum);
//Json数据均为字符型,需先将cell设置格式为String
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
String cellValue = cell.getStringCellValue();
returncellValue;
}
public void write(String filepath, intsheetNum, introwNum, intcellNum, String value){
try {
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(filepath));
XSSFSheet sheet = workbook.getSheetAt(sheetNum);
XSSFRow row = sheet.getRow(rowNum);
XSSFCell cell = row.createCell(cellNum);
cell.setCellValue(value);
FileOutputStream out = new FileOutputStream(filepath);
workbook.write(out);
out.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
publicclass HttpclientUtil {
public String post(String url, String json) throws ClientProtocolException, IOException{
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
post.setHeader("content-type", "application/json;charset=UTF-8");
StringEntity entity = new StringEntity(json, "UTF-8");
post.setEntity(entity);
CloseableHttpResponse response = httpclient.execute(post);
//获取响应内容
String entityFlow = EntityUtils.toString(response.getEntity());
response.close();
httpclient.close();
returnentityFlow;
}
public String get(String url) throws ParseException, IOException{
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet get = new HttpGet(url);
get.setHeader("content-type", "application/json;charset=UTF-8");
CloseableHttpResponse response = httpclient.execute(get);
//获取响应内容
String entityFlow = EntityUtils.toString(response.getEntity());
response.close();
httpclient.close();
returnentityFlow;
}
}
publicclass JsonUtil {
publicstatic StringmapTojson(LinkedHashMap map){
JSONObject jo = new JSONObject();
jo.put("map", map);
String json = jo.get("map").toString();
returnjson;
}
}
工具类写完之后就可以直接用来写我们主要的测试类了
publicclass QuerySpecialList {
publicstaticvoid main(String[] args) throws ClientProtocolException, IOException {
LinkedHashMap map = new LinkedHashMap();
String url = null;
String filepath = "D:\\data.xlsx";
JsonUtil jsonUtil = new JsonUtil();
//从Excel中读取数据
ExcelUtil excelUtil = new ExcelUtil();
//读取Excel表格中的URL
url = excelUtil.read(filepath, 0, 1, 0);
//for循环读取Excel表格中的内容
for(intj = 1; j <= 2; j++){
for (inti = 1; i <= 8; i++) {
map.put(excelUtil.read(filepath, 0, 0, i), excelUtil.read(filepath, 0, j, i));
}
System.out.println(map.toString());//输出验证
String json = JsonUtil.mapTojson(map);//转化map为json方便接下来处理
//创建httpclient实例
HttpclientUtil httpclient = new HttpclientUtil();
String entityFlow = httpclient.post(url, json);
System.out.println(entityFlow);
//写入接口返回值
excelUtil.write(filepath, 0, j, 10, entityFlow);
//转化返回值为json数据,以便取出resultcode自动,进行状态码的校验
JSONObject jo = new JSONObject(entityFlow);
String resultCode = jo.get("resultCode").toString();
if (resultCode.equals("1000")) {
excelUtil.write(filepath, 0, j, 11, "pass");
}else {
excelUtil.write(filepath, 0, j, 11, "fail");
}
}
}
}
最后的结果如下图,可以看到实际输出报文以及案例执行情况都已经写进了excel表格
其实代码没有很难,大家看项目架构的时候能看到我写了好几个test类,因为在写的过程中我也碰到各种问题,哎,毕竟不是科班出身。。。所以就先写了几个测试类来捋顺思路,推荐大家可以试下这个办法。
上面的例子是很粗的,毕竟httpclient的工具类里应该要加上对各种状态的处理。这个案例没有完善,大家可以试着写成web项目,把表格的一些参数通过前端页面来输入,这样看起来会更高级。