测试用例的设计
测试用例的设计巧妙之处:
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;
}
@Override
public 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