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

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

工具:

         Maven添加依赖

         httpclient 处理请求

         poi    处理接口报文

         json  转化poi读取到的数据

 

最后项目大概是这样子

 

Now,Show Time!

 

一、理思路,不懵逼

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

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

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

 

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

创建过程就不再赘述了,直接创建之后再pom文件中添加下面的依赖。有个小插曲说一下,有心的朋友已经发现poi依赖用的是poi-ooxml,之所以用这个是因为我的excel文件是xlsx后缀的,所以只能用org.apache.poi.xssf这个包,至于其他后缀用什么可以参考下我之前写的关于poi的文字。

  <dependencies>

    <dependency>

        <groupId>org.apache.httpcomponents</groupId>

        <artifactId>httpclient</artifactId>

        <version>4.5</version>

    </dependency>

 

  <!--https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->

    <dependency>

        <groupId>org.apache.httpcomponents</groupId>

        <artifactId>httpcore</artifactId>

        <version>4.4.6</version>

    </dependency>

 

    <!-- https://mvnrepository.com/artifact/org.json/json-->

    <dependency>

        <groupId>org.json</groupId>

        <artifactId>json</artifactId>

        <version>20180130</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>

 

三、粮草已备,策马狂奔吧

 

         现在可以开始项目了,因为我们要处理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<String, String> 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<String, String> map = new LinkedHashMap<String, String>();

       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项目,把表格的一些参数通过前端页面来输入,这样看起来会更高级。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值