博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RestAssured接口自动化从入门到框架搭建-21-框架组装-TestBase类功能扩充和工具类TestUtils
阅读量:4301 次
发布时间:2019-05-27

本文共 4686 字,大约阅读时间需要 15 分钟。

接着前面的内容,这篇主要针对父类TestBase.java里面功能进行扩充,主要是Rest Assured的一些常见方法的封装,还有就是在Utils包下新建一个TestUtils.java类,里面主要是写一些和测试响应断言相关的方法。

1.TestUtils.java内容

直接来看代码,我就简单写了几个方法,大家可以提意见,最后补充到这个github项目中,完善这个框架。

package com.anthony.utils;import java.util.HashMap;import org.testng.Assert;import io.restassured.path.json.JsonPath;import io.restassured.response.Response;public class TestUtils {		//断言状态码是不是200或者其他状态码,例如常见404等    public void checkStatusCode (Response res, int statusCode) {        Assert.assertEquals(res.getStatusCode(), statusCode, "状态码检查失败!");    }        //打印响应全部内容,debug中应该经常用到这个    public void printAllResponseText(Response res) {    	System.out.println(res.then().log().all());    }        //只打印响应正文    public void printResponseBody(Response res) {    	System.out.println(res.then().log().body());    }}

第一个方法就是每一个接口测试过程都需要进行的状态码的检查,大部分情况下都是200的检测,也有部分201 202 404的状态检测,所以我把200这个地方不能写死,直接我们调用该方法传入期待的响应状态码。

第二个方法和第三个方法,更多是在写接口自动化测试脚本调试过程中使用,避免在测试类中写System.out.print语句,很容易看懂,一个是全部打印响应内容,一个是打印响应正文,都是以字符串格式输出。

肯定还有其他工具方法可以封装到这里,具体看实际项目,本人手上没有实际接口自动化测试项目,所以见识少,欢迎大家一起讨论和完善这里。

 

2.TestBase.java内容

前面一篇,我们完成了一些,这次加入的方法都是一些Rest Assured全局设置或者变量之类的方法。

package com.anthony.base;import java.util.ResourceBundle;import org.apache.log4j.Level;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;import org.testng.annotations.AfterClass;import org.testng.annotations.BeforeClass;import com.anthony.utils.TestUtils;import io.restassured.RestAssured;import static io.restassured.RestAssured.get;import static io.restassured.RestAssured.given;import io.restassured.http.ContentType;import io.restassured.path.json.JsonPath;import io.restassured.response.Response;import io.restassured.specification.RequestSpecification;public class TestBase {		public static RequestSpecification httpRequest;	public static Response response;	public Logger logger;		public static String serverHost;	public static String port;	//Global Setup Variables	public Response res = null; //Response	public JsonPath jp = null; //JsonPath    //测试用例中断言代码能用上这里的 testUtils对象  	public static TestUtils testUtils = new TestUtils();  			static {		// 用于加载properties文件		// 注意这里不需要文件扩展名.properties		ResourceBundle rb = ResourceBundle.getBundle("config"); 		serverHost = rb.getString("Host");		port = rb.getString("Port");	}		@BeforeClass	public void setup() {		String className = this.getClass().getName();		logger = Logger.getLogger(className);		PropertyConfigurator.configure("log4j.properties");		logger.setLevel(Level.DEBUG);		setBaseURI(); //设置Base URI		//设置Base Path,我这里是api(https://reqres.in/接口地址都是api开头,所以                //这里basepath设置api这个字符串),看看具体你自己项目请求地址结构                setBasePath("api");                 setContentType(ContentType.JSON); //设置Content Type	}		@AfterClass	public void afterTest (){	        //测试之后恢复一些值的设定	        resetBaseURI();	        resetBasePath();	}	    //设置 base URI    public static void setBaseURI (){    	if("80".equals(port)) {    		RestAssured.baseURI = serverHost;    	}else {    		RestAssured.baseURI = serverHost+":"+port;    	}        //System.out.println(RestAssured.baseURI);    }    //设置base path    public static void setBasePath(String basePath){        RestAssured.basePath = basePath;    }    //执行完测试后重置 Base URI    public static void resetBaseURI (){        RestAssured.baseURI = null;    }    //执行完测试后重置 base path    public static void resetBasePath(){        RestAssured.basePath = null;    }    //设置请求 ContentType    public static void setContentType (ContentType Type){        given().contentType(Type);    }    //返回指定请求path的 response内容    public static Response getResponsebyPath(String path) {        return get(path);    }    //返回响应内容    public static Response getResponse() {        return get();    }    //返回 JsonPath对象    public static JsonPath getJsonPath (Response res) {        String json = res.asString();        //System.out.print("returned json: " + json +"\n");        return new JsonPath(json);    }}

这几个方法,重点看看BeforeClass和AfterClass中的调用就明白什么意思,这个setBaseURI,具体看看你自己项目的接口的地址,做出对应改变就好。例如有些接口服务器中setBasePath(), 参数为空就好,这里为什么我写成api,我写了注释。

 

3.测试类

这里举例一个具体的get接口的例子,让我们封装的TestBase对象能够跑起来,这里就是通过一个成功跑起来的测试用例,证明我们前面两个类的代码没有问题。

package com.anthony.cases;import org.testng.annotations.Test;import com.anthony.base.TestBase;public class ListUsersTest extends TestBase {		// get https://reqres.in/api/users?page=2	@Test	public void test01_ListUsers() {		res = getResponsebyPath("/users?page=2");		jp = getJsonPath(res);		testUtils.checkStatusCode(res, 200);		testUtils.printAllResponseText(res);	}}

这样测试代码就可以少写很多代码和导入包语句,看起来很简洁。注意我上面提示完整的get接口请求地址和我调用getResponsbyPath()方法的写法,这里就写了一部分,因为前面设置了BasePath和baseURI, 所以每个接口用例就写后面一段就可以。

本篇内容很简单,封装的方法还是太少,欢迎大家来讨论,怎么封装更好。

转载地址:http://uqxws.baihongyu.com/

你可能感兴趣的文章
python绘制k线图(蜡烛图)报错 No module named 'matplotlib.finance
查看>>
talib均线大全
查看>>
期货市场技术分析06_长期图表和商品指数
查看>>
期货市场技术分析07_摆动指数和相反意见理论
查看>>
满屏的指标?删了吧,手把手教你裸 K 交易!
查看>>
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>
X 分钟速成 Python
查看>>
对于模拟交易所引发的思考
查看>>
高频交易的几种策略
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>