代理配置
代理配置
简介
在调试接口用例过程中,如果响应结果和预期结果不一致,则需要检查请求信息。通过代理获取请求对应的响应信息,将响应信息与正常请求响应信息进行对比,就能够更直观的排查请求错误,相当于编写代码时的 debug 功能。
使用场景
在自动化测试中,可以通过设置代理来监听自动化测试脚本的请求响应信息。
演示代码
通过 proxies
参数,监听请求与响应信息。
演示代码:
import requests
# 定义代理的配置信息,分别需要设定http协议与https协议的代理地址。
proxy = {
"http": "http://127.0.0.1:8000",
"https": "http://127.0.0.1:8888"
}
# 通过proxies 传递代理配置。
requests.post(url="https://httpbin.ceshiren.com", proxies=proxy, verify=False)
通过 proxies
配置代理信息,代理格式要求为字典类型。verify
是对证书的验证,默认情况下,verify
是设置为 True
。在发送 HTTPS
请求的时候,将 verify
设置为 True
,会对 SSL 证书进行验证;将 verify
设置为 False
,Requests
能忽略对 SSL 证书的验证。
演示代码(Java):
HTTP
请求:
package ch01_proxy;
import io.restassured.RestAssured;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static io.restassured.specification.ProxySpecification.host;
public class TestHttpProxy {
@Test
void httpProxy(){
// 定义一个代理的配置信息
RestAssured.proxy = host("localhost").withPort(8888);
given()
// .proxy("127.0.0.1",8888) // 设置代理
.when()
.get("http://httpbin.org/get") // 发送 HTTP请求
.then()
.log().all() // 打印完整响应信息
.statusCode(200); // 响应断言
}
}
HTTPS
请求
package ch01_proxy;
import io.restassured.RestAssured;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static io.restassured.specification.ProxySpecification.host;
/**
* 测试通过HTTPS代理访问远程服务。
*/
public class TestHttpsProxy {
/**
* 使用本地的HTTPS代理服务器进行网络请求测试。
* <p>
* 此测试用例将通过定义在本地主机上的HTTPS代理(端口8888)来访问https://httpbin.ceshiren.com/get,
* 并验证响应状态码是否为200。
*/
@Test
void testHTTPProxy() {
// 配置代理服务器,指定主机和端口
RestAssured.proxy = host("localhost").withPort(8888);
// 允许使用不安全的HTTPS连接,避免SSL握手错误
RestAssured.useRelaxedHTTPSValidation();
given()
//.relaxedHTTPSValidation() // 已在全局设置忽略HTTPS校验
.when()
.get("https://httpbin.ceshiren.com/get") // 发送GET请求到目标URL
.then()
.log().all() // 打印完整的响应信息,包括头部和体
.statusCode(200); // 断言响应状态码为200,表示请求成功
}
}
使用代理工具验证结果
在实际工作中,使用代理工具(参考常用抓包工具章节)结合代理配置可以清楚查看每一次的请求信息,实际操作步骤如下:
抓包工具设置的端口,与代码的代理地址端口保持一致,如下图所示:
在页面发起正常的请求信息,post 请求中,请求数据 key 值为 “school
”,value 值为“霍格沃兹测试学社
”,如下图所示:
使用自动化测试脚本发起请求,与第步是一样,只是修改 value 值为“第二次请求”。
- Python 演示代码
import requests
def req():
url = "https://httpbin.ceshiren.com/post"
# 定义代理配置信息
proxy = {
"http": "http://127.0.0.1:8888",
"https": "http://127.0.0.1:8000"
}
data={'school': "第二次请求"}
# 通过proxies 传递代理配置
r = requests.post(url, proxies=proxy, data=data, verify=False)
print(r.json())
req()
通过抓包工具获取数据,如下图所示:
总结
通过以上案例,可以看出将代理配置和代理工具结合使用,可以非常直观看出两次接口请求的差别,从而提高定位接口测试脚本问题的效率。