接口测试不像UI测试有界面,比较直观,其实核心的测试思想都是一致的,主要验证接口是否通,接口之间的传递是否正常,把正常的情况考虑进去,再考虑一些异常情况。一般的接口测试可以用浏览器插件,如postman、restclient等,接口较多的话也可以用loadrunner、jmeter、soapui等工具,目前业内用的比较多的还是自己封装一套测试框架,进行自动化测试。
近日整理了一下接口的测试框架,虽然比较low,但也算自己的成果和总结,目前这套框架的主要工作量是在excel中写用例上,即把ip、端口、请求方式,参数及响应的参数值等在excel中配置好后,由用例层去调起这个sheet页,然后交给数据驱动,数据驱动根据配置的优先级去读取测试数据,把符合用例优先级的测试数据提供给测试类。测试类把测试数据再提供给执行器,由执行器去请求,并把请求结果存到对象中。供后者调用使用。
接口测试中比较麻烦的还是对返回结果的一个断言,有的接口返回结果简单,有的接口返回结果比较复杂,json中有数组,且字段多。具体我们以什么为预期结果,还是得实际情况实际考虑,可以从数据库中取值,也可以设定好场景,存为国定值。
下图是我简单画了一个流程图,不对之处还望读者指出。
拿其中的结果存储举例。excel的样式
1.要自动存储到excel中的话,需要知道存储的目标位置,这里定义了一个枚举,是excel中的表头。
package com.core.ienum; /** * @author QiaoJiafei * @version 创建时间:2016年3月4日 下午3:41:00 * 类说明 */ public enum ExcelHeaders { StatusCode(){ @Override public String toString() { return "StatusCode"; } }, ResponseJson(){ @Override public String toString() { return "ResponseJson"; } }, ResultCode(){ @Override public String toString() { return "ResultCode"; } }, Result(){ @Override public String toString() { return "Result"; } }, RUN(){ @Override public String toString() { return "RUN"; } }; ExcelHeaders() { } }
2、再定义一个方法,是返回这个表头的所在列数
private int getheaderColNum(ExcelHeaders headers) { int colNum = 0; int startCol = 3; int paramcount = Integer.parseInt(OptionFile.getExcel("./excel/testresultnew.xls", sheet, 1, 4)); switch (headers) { case StatusCode: colNum = startCol+paramcount+1; break; case ResponseJson: colNum = startCol+paramcount+2; break; case ResultCode: colNum = startCol+paramcount+3; break; case Result: colNum = startCol+paramcount+5; break; case RUN: colNum = startCol+paramcount+6; break; default: break; } return colNum; }
3、这样就有了excel的列数,行数是测试驱动类提供的,sheet页是测试驱动通过java反射获取到的,这样有了excel的sheet、行数、列数,就可以自动的存贮值了。
4、json处理的话还是推荐用jsonpath,前面的文章已经讲过了。
暂时先介绍到这吧。