基于Java+Maven+Testng+RestAssured+Allure+Jenkins搭建一个接口自动化框架
测试用例的设计
测试用例的设计巧妙之处:
1、参照了Jmeter的参数化方式,将需要参数化的数据用${}包裹起来,后边在解析Excel时,对${}包裹起来的数据,用正则表达式等技术手段替换成实际环境变量的数据,从而实现了参数化设计
2、有一个提取表达式列,通过编写每个接口的JSON提取表达式,后边在解析Excel时,对接口执行后的响应数据用该表达式提取出来,保存到环境变量,如果某些接口需要前置接口的响应数据,我们就可以从环境变量中获取该数据出来,从而解决了接口关联的问题。
3、有一个数据库断言列,由于接口通常需要与数据库操作关联起来,那么通过数据库断言,可以使接口测试结果更加准确稳定。
接下来就进行实际框架搭建了。
一:首先在pom.xml中引入RestAssured、Testng、EasyPOI、fastJson依赖
<!--RestAssured依赖-->
<dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>4.2.0</version><scope>test</scope>
</dependency><!--Testng依赖-->
<dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.0.0</version><scope>test</scope>
</dependency><!--easyPoi依赖,有两个坐标-->
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.2.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.2.0</version>
</dependency><!--fastJson依赖-->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.70</version>
</dependency>
本次框架主要包:
common包:存放测试用例的基类,用于封装测试用例的共性操作
config包:存放项目的配置信息,像项目的域名信息、测试用例Excel路径等会在此处配置
enties包:存放项目的实体类
testcases包:存放测试用例
utils包:存放项目的工具类
二:我们现在先来解决测试用例的读取操作。
1、在src/test目录下新建一个resources资源目录,将测试用例放到该目录下
2、在entries包下新建一个CaseInfo实体类,实体类属性编写我们Excel测试用例所有列信息,每个属性用@Excel注解标注,该注解主要是EasyPOI可以用来映射对象属性信息,注意:@Excel里的name信息要与表头字段完全一致,否则无法映射。然后每个属性添加getter、setter方法,最后再添加一个toString方法。
package com.howentech.entries;import cn.afterturn.easypoi.excel.annotation.Excel;public class CaseInfo {@Excel(name = "序号(caseId)")private int caseId;@Excel(name = "接口模块(interface)")private String interfaceName;@Excel(name = "用例标题(title)")private String title;@Excel(name = "请求头(requestHeader)")private String requestHeader;@Excel(name = "请求方式(method)")private String method;@Excel(name = "接口地址(url)")private String url;@Excel(name = "参数输入(inputParams)")private String inputParams;@Excel(name = "期望返回结果(expected)")private String expected;@Excel(name = "数据库断言")private String dbAssert;@Excel(name="提取表达式(extractExper)")private String extractExper;public int getCaseId() {return caseId;}public void setCaseId(int caseId) {this.caseId = caseId;}public String getInterfaceName() {return interfaceName;}public void setInterfaceName(String interfaceName) {this.interfaceName = interfaceName;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getRequestHeader() {return requestHeader;}public void setRequestHeader(String requestHeader) {this.requestHeader = requestHeader;}public String getMethod() {return method;}public void setMethod(String method) {this.method = method;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getInputParams() {return inputParams;}public void setInputParams(String inputParams) {this.inputParams = inputParams;}public String getExpected() {return expected;}public void setExpected(String expected) {this.expected = expected;}public String getDbAssert() {return dbAssert;}public void setDbAssert(String dbAssert) {this.dbAssert = dbAssert;}public String getExtractExper() {return extractExper;}public void setExtractExper(String extractExper) {this.extractExper = extractExper;}@Overridepublic String toString() {return "CaseInfo{" +"caseId=" + caseId +", interfaceName='" + interfaceName + '\'' +", title='" + title + '\'' +", requestHeader='" + requestHeader + '\'' +", method='" + method + '\'' +", url='" + url + '\'' +", inputParams='" + inputParams + '\'' +", expected='" + expected + '\'' +", dbAssert='" + dbAssert + '\'' +", extractExper='" + extractExper + '\'' +'}';}
}
3、在config包下新建Contants类,填写项目的基本配置信息
package com.howentech.config;public class Contants {//项目访问地址public static final String PROJECT_URL="v.juhe.cn";//项目BASEURI