사실 API Test에 Requests
를 사용한다고해서 특별한 사용법이 있는 것은 아닙니다. 요근래 대부분의 API 는 RESTful하게 설계되어있고, 해당 API 요건에 따라 테스트를 해보면 됩니다.
일단 사용하기 위해서는
requests
패키지를 import해주어야합니다.
import requests
기본적으로 request()
메소드 하나면 대부분의 동작을 확인해볼 수 있긴 합니다.
>>> import requests
>>> req = requests.request('GET', 'https://httpbin.org/get')
>>> req
<Response [200]>
첫번째 파라미터로는 HTTP request를 입력해주고, 그 다음으로는 url을 입력해주면 됩니다.
https://requests.readthedocs.io/en/latest/api/#main-interface
HTTP request별로 메소드가 별도로 존재합니다.
아마 제일 많이 사용하는 메소드는 get()
, post()
, put()
, patch()
, delete()
일 것 같습니다.
response = requests.get("{API_EndPoint}",
params={
'AuthorName':'atetete'
},
)
response = requests.delete("{API_EndPoint}",
json={
"ID":bookID
})
넘겨주는 파라미터는 대부분의 경우 dictionary의 형태로 넘겨주면 됩니다. 특별한 headert설정이 있다면, 추가적으로 header=
로 넘겨주면 됩니다.
post()
의 경우, request body로 대량의 데이터를 보내야할 수 있습니다. 이것을 보통 payload
라고 하는데, 대부분 dictionary형태의 json
포맷으로 보냅니다.
payload = {
"name":"ABCDEFG", "isbn":"bcd",
"aisle":"227",
"author":"John foe"
}
response = requests.post("{API_EndPoint}",
json=payload,
headers={
"Content-Type" : "application/json"
}
)
json=
파라미터로 payload를 한 번에 넘겨줄 수 있습니다.
데이터를 가져오는 메소드 혹은 모듈로 만들어서 call해줄 수도 있습니다.
위와 같이 request를 실행하면, 그 결과로 response가 오기 마련입니다. response.text
로 간단한 body내용을 확인해볼 수 있습니다.
API Test에서 가장 간단하고 많이 확인하는 방법은 status code를 확인하는 것입니다. 특정 request에 따라 예상한 statuscode가 return되는지를 확인합니다.
response.status_code
response.headers
근데 헤더정보는 dictionary 타입처럼 값을 확인해볼 수 있습니다.
print(response.headers[‘Content-Type’])
보통의 response의 body는 json
포맷으로 넘어옵니다.
response에서 json()
을 해주면 dictionary형태로 확인할 수 있습니다.
bookID = response.json()['ID']
Python내장의 기본 assert
를 사용해도 문제는 없습니다.
assert
는 객체단위로도 비교해볼 수 있습니다.
for res in response_json:
if res["isbn"] == "RGHCC":
assert expectedBook == res # assertion also can each object other
break
다만 Pytest
등을 사용할 경우 좀 더 테스트에 집중할 환경을 조성할 수 있습니다.