Skip to content

代理配置

代理配置

简介

在调试接口用例过程中,如果响应结果和预期结果不一致,则需要检查请求信息。通过代理获取请求对应的响应信息,将响应信息与正常请求响应信息进行对比,就能够更直观的排查请求错误,相当于编写代码时的 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 设置为 FalseRequests 能忽略对 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()

通过抓包工具获取数据,如下图所示:

总结

通过以上案例,可以看出将代理配置和代理工具结合使用,可以非常直观看出两次接口请求的差别,从而提高定位接口测试脚本问题的效率。