Basic usage Requests library on API Testing

Dahun Yoo·2020년 12월 9일
0
post-thumbnail

사실 API Test에 Requests를 사용한다고해서 특별한 사용법이 있는 것은 아닙니다. 요근래 대부분의 API 는 RESTful하게 설계되어있고, 해당 API 요건에 따라 테스트를 해보면 됩니다.


requests

일단 사용하기 위해서는
requests 패키지를 import해주어야합니다.
import requests

request

기본적으로 request() 메소드 하나면 대부분의 동작을 확인해볼 수 있긴 합니다.

>>> import requests
>>> req = requests.request('GET', 'https://httpbin.org/get')
>>> req
<Response [200]>

첫번째 파라미터로는 HTTP request를 입력해주고, 그 다음으로는 url을 입력해주면 됩니다.

  • GET
  • POST
  • PUT, PATCH
  • DELETE

https://requests.readthedocs.io/en/latest/api/#main-interface

method

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= 로 넘겨주면 됩니다.

payload

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해줄 수도 있습니다.

response

위와 같이 request를 실행하면, 그 결과로 response가 오기 마련입니다. response.text 로 간단한 body내용을 확인해볼 수 있습니다.

status code

API Test에서 가장 간단하고 많이 확인하는 방법은 status code를 확인하는 것입니다. 특정 request에 따라 예상한 statuscode가 return되는지를 확인합니다.
response.status_code

response.headers
근데 헤더정보는 dictionary 타입처럼 값을 확인해볼 수 있습니다.
print(response.headers[‘Content-Type’])

body

보통의 response의 body는 json 포맷으로 넘어옵니다.
response에서 json() 을 해주면 dictionary형태로 확인할 수 있습니다.
bookID = response.json()['ID']

assert

Python내장의 기본 assert를 사용해도 문제는 없습니다.
assert는 객체단위로도 비교해볼 수 있습니다.

for res in response_json:
    if res["isbn"] == "RGHCC":
        assert expectedBook == res  # assertion also can each object other
        break

다만 Pytest 등을 사용할 경우 좀 더 테스트에 집중할 환경을 조성할 수 있습니다.

profile
QA Engineer

0개의 댓글