技術(shù)分享 | 如何使用代理配置快速定位接口測試腳本問題?
本文節(jié)選自霍格沃茲測試開發(fā)學社內(nèi)部教材
在調(diào)試接口用例過程中,如果響應結(jié)果和預期結(jié)果不一致,則需要檢查請求信息。通過代理獲取自動化測試中的請求響應信息,對比與正常請求響應的區(qū)別,就能夠更直觀的排查請求錯誤,相當于編寫代碼時的 debug 功能。
實戰(zhàn)練習
在自動化測試中,不論是 Java 版本還是 Python 版本,均可以通過設置代理來監(jiān)聽自動化測試腳本的請求響應信息。
Python 版本
通過 proxies 參數(shù),監(jiān)聽請求與響應信息。
import requests?
# 1. 定義一個代理的配置信息,分別需要設定http協(xié)議與https協(xié)議的代理地址。
proxy = {
??
?"http": "http://127.0.0.1:8000",?
? ?"https": "http://127.0.0.1:8080"?
}
2. 通過proxies 傳遞代理配置。
requests.post(url="https://httpbin.ceshiren.com", proxies=proxy, verify=False)
通過 proxies 設定代理信息,代理格式要求為字典類型。默認情況下,verify 是設置為 True 的。將 verify 設置為 False,在發(fā)送 HTTPS 請求的時候,Requests 能忽略對 SSL 證書的驗證。
Java 版本
import io.restassured.RestAssured;
import static io.restassured.RestAssured.*;
import static io.restassured.specification.ProxySpecification.host;
import static org.hamcrest.core.IsEqual.equalTo;
public class Requests {
? ?public static void main(String[] args) {
? ? ? ?RestAssured.proxy = host("127.0.0.1").withPort(8080);
? ? ? ?given().relaxedHTTPSValidation().when().get("https://httpbin.ceshiren.com/get").
? ? ? ? ? ? ? ?then().log().all();
? ?}
}
使用代理工具驗證結(jié)果
在實際工作中,使用代理工具(參考常用代理工具章節(jié))結(jié)合代理配置可以清楚查看每一次的請求信息,實際操作步驟如下:
抓包工具設置的端口,與代碼的代理地址端口保持一致,如下圖所示:

如下圖所示,在頁面發(fā)起正常的請求信息,post 請求中,請求數(shù)據(jù) key 值為 school,value 值為霍格沃茲測試學社:

使用自動化測試腳本發(fā)起與第2步同樣的請求,只是修改 value 值為第二次請求。
Python 版本
import requests
def test_proxy():
? ?# 1. 定義一個代理的配置信息
? ?proxy = {
? ? ? ?"http": "http://127.0.0.1:8888",
? ? ? ?"https": "http://127.0.0.1:8000"
? ?}
? ?# 2. 通過proxies 傳遞代理配置
? ?requests.post(url="https://httpbin.ceshiren.com/post",
? ? ? ? ? ? ? ? ?data={'school': "第二次請求"},
? ? ? ? ? ? ? ? ?verify=False)
Java 版本
import io.restassured.RestAssured;
import static io.restassured.RestAssured.*;
import static io.restassured.specification.ProxySpecification.host;
public class Requests {
? ?public static void main(String[] args) {
? ? ? ?RestAssured.proxy = host("127.0.0.1").withPort(8080);
? ? ? ?given().
? ? ? ? ? ? ? ?contentType("application/x-www-form-urlencoded;charset=utf-8").
? ? ? ? ? ? ? ?formParam("school", "第二次請求").relaxedHTTPSValidation().
? ? ? ? ? ? ? ?when().
? ? ? ? ? ? ? ?post("https://httpbin.ceshiren.com/post").
? ? ? ? ? ? ? ?then()
? ? ? ? ? ? ? ?.log().all();
? ?}
}
抓包工具抓包結(jié)果如下圖所示:
通過以上案例,可以看出將代理配置和代理工具結(jié)合使用,可以非常直觀看出兩次接口請求的差別,從而提高定位接口測試腳本問題的效率。