接口自动化java---poi+httpclient+json

之前一片文章很浅的试了下接口测试的代码,今天就正式开始搞吧,正好给公司现在的一个后台系统写了个大概的框架,屏掉一些敏感信息,把代码及思路写出来供大家参考下。

工具:

         Maven添加依赖

         httpclient 处理请求

         poi    处理接口报文

         json  转化poi读取到的数据

 

最后项目大概是这样子

接口自动化java---poi+httpclient+json_第1张图片

 

Now,Show Time!

 

一、理思路,不懵逼

关于接口自动化应该怎么来写,这个我认为你要先分析你的excel文件怎么写。之后顺着这个线头慢慢的往外抽。

既然是自动化的,那我们肯定是希望程序帮我们完成请求的组装,响应的写入及校验,测试结果的写入,那么我们表格的骨架就出来了。见下图(敏感信息模糊处理了)

接口自动化java---poi+httpclient+json_第2张图片

现在数据有了,可以着手项目的编写啦!

 

二、创建maven项目,添加依赖

创建过程就不再赘述了,直接创建之后再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表格

 

接口自动化java---poi+httpclient+json_第3张图片

 

四、写在最后

         其实代码没有很难,大家看项目架构的时候能看到我写了好几个test类,因为在写的过程中我也碰到各种问题,哎,毕竟不是科班出身。。。所以就先写了几个测试类来捋顺思路,推荐大家可以试下这个办法。

         上面的例子是很粗的,毕竟httpclient的工具类里应该要加上对各种状态的处理。这个案例没有完善,大家可以试着写成web项目,把表格的一些参数通过前端页面来输入,这样看起来会更高级。

 

你可能感兴趣的:(接口自动化,java)