서버 측 자동화 테스트 과정에서 요청이 시작된 후 응답 값을 확인해야 합니다. 응답 정보가 예상 값을 충족하는지 확인한 후 이 인터페이스의 자동화된 테스트 케이스를 완전히 통과한 것으로 간주합니다. 따라서 본 장에서는 인터페이스 자동화 테스트에서 서버가 반환한 응답 내용에 대해 어설션 검증을 수행하는 방법에 대해 설명한다.
전투 연습
인터페이스 서비스에 대한 HTTP 요청 정보를 시작하고 응답 콘텐츠를 얻은 후 어설션을 확인합니다.
파이썬 데모 코드
요청이 이루어진 후 변수를 사용하여 객체 r
인 응답의 내용을 저장합니다 .Response
r = requests.get("https://httpbin.ceshiren.com/get")
응답 결과:
{
"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://httpbin.ceshiren.com/get"
}
Response 개체에는 응답 헤더 직접 가져오기, 유니코드로 인코딩된 응답 콘텐츠 가져오기, 이진 응답 콘텐츠 가져오기, 원래 응답 콘텐츠 가져오기 등과 같이 호출할 수 있는 많은 강력한 메서드가 있습니다.
응답 어설션
응답 상태 코드 어설션
-
어설션 성공
import requests
r = requests.get('https://httpbin.ceshiren.com/get')
assert r.status_code==200
assert
파이썬의 내장 함수로 표현식을 판단하는 데 사용되며 표현식 조건이 False이면 예외가 발생합니다. r.status_code
반환 값의 상태 코드를 가져오는 데 사용되는 응답 개체의 메서드입니다. assert r.status_code==200
상태 코드가 200인지 판단하는 것이고, 200이 아니면 예외를 던진다.
-
어설션 실패
>>> import requests
>>> r = requests.get('https://httpbin.ceshiren.com/get')
>>> 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://httpbin.ceshiren.com/post',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://httpbin.ceshiren.com/post"
}
assert r.json()["json"]["hogwarts"][0] == "a"를 사용하여 json의 내용을 주장합니다. 여기서 r.json()은 해당 내용 r.json()을 가져옵니다. [ "json"]은 json에서 얻은 내용, r.json()["json"]["hogwarts"]는 호그와트에서 얻은 내용, r.json()["json"]["hogwarts"][ 0 ]은 호그와트의 첫 번째 데이터입니다.
자바 데모 코드
Java는 다음을 사용하여 어설션 검증을 수행하고 then()
메소드는 다양한 유형의 응답 정보를 검증할 수 있습니다.
-
응답 상태 코드 성공 어설션
import static io.restassured.RestAssured.*;
public class Requests {
public static void main(String[] args) {
given().when().get("https://httpbin.ceshiren.com/get").
//通常通过 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://httpbin.ceshiren.com/get").
then().body("headers.Host", equalTo("httpbin.ceshiren.com")).log().all();
}
}
then().body("headers.Host", equalTo("httpbin.ceshiren.com"))
json의 내용을 어설션하여 해당 then().body()
내용을 얻고, 첫 번째 매개변수는 응답 내용에서 실제 필드 값을 추출하고, 두 번째 매개변수는 equalTo()
메서드를 호출하고 예상 결과를 전달합니다.
빈약한 힘
마지막으로 제 글을 꼼꼼히 읽어주신 모든 분들께 감사하다는 말씀을 드리고 싶습니다. 팬 여러분들의 성장과 관심을 쭉 봐서 늘 보답이 필요합니다. 아주 귀한 것은 아니지만 뺏어가셔도 좋습니다. 필요해:
이 자료는 [자동 테스트]를 진행하려는 친구들을 위한 가장 포괄적이고 완전한 준비 창고가 되어야 합니다.이 창고는 또한 가장 어려운 여정을 함께했으며 여러분에게도 도움이 되었으면 합니다! 모든 것이 가능한 한 빨리 이루어져야 하며, 특히 기술 산업에서는 우리의 기술력을 향상시켜야 합니다. 도움이 되었으면 합니다.....