自建一个代理服务器,解决接口自动测试的麻烦事
2023-12-03 08:10:33
最近在做一个需求: 由于是子线程轮询执行的,属于纯数据层的逻辑,所以涉及的情况比较复杂。自测时如果利用Charles进行mock,只能进行固定模拟,而笔者想实现的效果类似:
- 1.每次发起请求都能自己指定http状态码
- 2.能够满足返回多种不同数据结构格式数据的能力
- 3.可以实现报文body模糊匹配
- 4.流量走代理可以看明文,断点看报文
所以就想到了实现一个自己的代理服务。需求明确了,接下来就是设计思路。
我们的目标是处理http请求/响应的代理服务器。这就涉及到怎么处理这些请求和响应,比如怎样区分请求与响应,数据怎样传输给客户端。
先说结论,笔者采用的是mina框架,mina框架轻量级,学习简单,完全能胜任这个任务。
框架 选定了,接下来就是编码了。核心逻辑就是怎么处理mina框架发来的数据,并将其转换成用户可用的数据。
我们知道http协议是基于文本的,服务端和客户端通过文本进行交互,通过解析文本,就可以得到客户端传来的数据,然后组织成想要的response。
当然还有更关键的一点,就是如何配置Charles。
Charles是一个专业的代理工具,可以帮助我们截取网络请求,并对其进行修改。
我们都知道HTTP协议是基于文本的,服务端和客户端通过文本进行交互,通过解析文本,就可以得到客户端传来的数据,然后组织成想要的response。
当然还有更关键的一点,就是如何配置Charles。
Charles是一个专业的代理工具,可以帮助我们截取网络请求,并对其进行修改。
使用Charles,我们需要把Charles的端口设置与自己的代理端口一致,并且在我们的程序中设置好Charles的ip地址和端口。
到这里代理服务器算是搭建好了,Charles也配置好了,接下来就是进行测试。
我们采用restassured作为测试框架,利用Charles代理RestAssured就可以进行接口测试了。
我们采用restassured作为测试框架,利用Charles代理RestAssured就可以进行接口测试了。
测试数据如下:
{"code":1,
"message":"success",
"data":1}
测试类代码如下:
@Test
public void post_test() throws Exception {
//1. 通过restassured发送请求到代理服务器
Response response = RestAssured.given()
.config(RestAssured.config()
.httpClient(HttpClientConfig.httpClientConfig()
.setProxy("localhost", 8888)))
.baseUri("http://www.baidu.com")
.port(8888)
.contentType("application/json")
.body("{\"code\":1,\"message\":\"success\",\"data\":1}")
.post("/");
//2. 取出代理服务器返回给restassured的数据
String body = response.getBody().asString();
System.out.println(body);
}
运行测试类,就会发现,我们修改后的数据正常返回。
到这里,整个代理服务器开发和接口测试,就算是完成了。
通过上面的介绍,相信大家已经对自建一个代理服务器有了一定的了解。希望这篇文章对您有所帮助!
如果您有任何问题,请随时与我联系。