🍅 視頻學習:文末有免費的配套視頻可觀看
🍅?點擊文末小卡片?,免費獲取軟件測試全套資料,資料在手,漲薪更快
在測試用例中,執行完測試用例后,最后一步是判斷測試結果是 pass 還是 fail,自動化測試腳本里面一般把這種生成測試結果的方法稱為斷言assert。
接口請求斷言是指在發起請求之后,對返回的響應內容去做判斷,用來查看是否響應內容是否與規定的返回值相符。
在發起請求后,我們使用一個變量 r 存儲響應的內容,也就是 Response 對象。
Response 對象有很多功能強大的方法可以調用,比如直接獲取響應頭,獲取 Unicode 編碼后的響應內容,獲取二進制的響應內容,獲取原始的響應內容等等。
接下來我們就詳解對接口服務發起 HTTP 請求信息,獲得響應內容之后,對其做斷言驗證。
一、Python 接口自動化斷言
在發起請求后,使用一個變量r存儲響應的內容,也就是Response對象。
r = requests.get("https://xxxxx")
響應結果:
{"args": {},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.ceshiren.com","User-Agent": "python-requests/2.25.1","X-Forwarded-Host": "httpbin.ceshiren.com","X-Scheme": "https"},"origin": "119.123.205.82","url": "https://xxxxx"
}
Response 對象有很多功能強大的方法可以調用,比如直接獲取響應頭,獲取 Unicode 編碼后的響應內容,獲取二進制的響應內容,獲取原始的響應內容等等。
響應斷言
響應狀態碼斷言
1、斷言成功
import requests
r = requests.get('https://xxxxx')
assert r.status_code==200
assert是 python 的內置函數,用來判斷表達式,當表達式條件為 False 的時候就會觸發異常。r.status_code是 response 對象內的一個方法,用于獲得返回值的狀態碼。assert r.status_code==200 就是在判斷狀態碼是否等于 200,如果不等于 200 則會拋出異常。
2、斷言失敗
>>> import requests
>>> r = requests.get('https://xxxxx')
>>> assert r.status_code==400
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AssertionError
從以上例子可了解到,此響應狀態碼實際輸出與預期結果狀態碼 400 不相等,所以拋出了異常。
Json 響應斷言
data = {"hogwarts": ["a","b","c"]}
r = requests.post('https://xxxxx',json=data)
print(json.dumps(r.json(),indent=2))
assert r.status_code == 200
assert r.json()["json"]["hogwarts"][0] == "a"
響應結果:
"args": {},"data": "{"hogwarts": ["a", "b", "c"]}","files": {},"form": {},"headers": {...省略...},"json": {"hogwarts": ["a","b","c"]},"origin": "113.89.8.68","url": "https://xxxx"
}
通過 assert r.json()[“json”][“hogwarts”][0] == “a” 對 json 的內容進行斷言,其中 r.json() 是獲取相應的內容,r.json()[“json”] 是獲取到 json 的內容,r.json()[“json”][“hogwarts”] 是獲取到 hogwarts 的內容,r.json()[“json”][“hogwarts”][0] 是 hogwarts 下的第一個數據。
二、Java 接口自動化斷言
Java 通過 then 進行斷言驗證,then() 方法可以對多種不同類型的響應信息進行驗證。
斷言響應狀態碼成功
import static io.restassured.RestAssured.*;public class Requests {public static void main(String[] args) {given().when().get("https://xxxxx").//通常通過 then 進行斷言驗證 then().statusCode(200);}
}
通過 then() 方法提供的 statusCode() 方法即可實現對于響應狀態碼的驗證,statusCode() 方法通常接收的是 int 類型的參數。statusCode(200) 表示判斷響應狀態碼是否等于 200,如果不等于 200 則會拋出異常。
如果將以上代碼中斷言驗證的代碼改成 statusCode(300),那么控制臺則會輸出異常信息。
Exception in thread "main" java.lang.AssertionError: 1 expectation failed.
Expected status code <300> but was <200>.
json 響應斷言
import static io.restassured.RestAssured.*;
import static org.hamcrest.core.IsEqual.equalTo;public class Requests {public static void main(String[] args) {given().when().get("https://xxxxx").then().body("headers.Host", equalTo("httpbin.ceshiren.com")).log().all();}
}
通過 then().body(“headers.Host”, equalTo(“httpbin.ceshiren.com”)) 對 json 的內容進行斷言,其中 then().body() 是獲取相應的內容。
第一個參數是從響應內容中提取實際的字段值。
第二個參數調用了 equalTo() 方法,并在其中傳入了期望結果。
同時,在這我為大家準備了一份軟件測試視頻教程(含面試、接口、自動化、性能測試等),就在下方,需要的可以直接去觀看。
字節大佬,一周講完,自動化測試項目實戰,這套教程是怎么稱霸B站的?【2024最新版】