[Django] Django Client를 통해 간단하게 테스트하기

django.test.Client를 통해서 요청 및 응답에 대한 테스트를 간단하게 짜보자


이전 포스팅

이전에 HttpResponse를 이용해서 간단하게 테스트하기를 통해서 HttpResponse객체를 생성하여 요청과 응답에 대한 테스트를 하는 내용에 대해서 작성하였는데 같은 기능을 이번에는 Django가 제공하는 client객체(Fixture)를 이용해보자


다른점

HttpResponse와 달리 django.test.Client를 이용하면 장고 에뮬레이팅에 의해서 실행되기 때문에 서버를 돌릴 필요가 없게 됩니다. Unit Test와 같은 단위 테스팅에 적합합니다.


사용법

기본적인 GET과 POST요청에 대한 사용법은 아래와 같다.

도메인을 함께 적어주는게 아니라 도메인 다음부터 오는 path을 적어줘야한다.

from django.test import Client

client = Client()

...
#GET
response = client.get('path', {'json': 'json', 'json data': 'json data'})

...
#POST
client.post('path', data={'json': 'json'})

...


GET

url을 명시해주고 그 다음에 Query String을 넘겨서 key-value 쌍으로 넣어주시면 됩니다.

from django.test import Client

client = Client()
#GET
response = client.get('url', {'json': 'json', 'json data': 'json data'})

response에는 응답이 오게 됩니다.


POST

url을 명시해주고 그 다음에 담을 데이터를 key-value 쌍으로 넣어주시면 됩니다.

from django.test import Client

client = Client()
#POST
response = client.post('url', data={'json': 'json'})

이 또한 마찬가지로 response에 응답이 오게 됩니다.


Response

응답에 대한 값이나 처리를 하게되는 경우도 있게 되는데 기본적으로 값을 가져오는 것은 다음과 같습니다. HttpResponse와는 다르게 테스팅 하기위한 몇가지 요소도 포함이 되어있습니다. 참조


  • content는 응답에서 body부분을 bytestring으로 가져오는 객체입니다.
response.content


  • context는 response content에서 렌더링한 template들을 반환합니다. 그 반환된 템플릿에서 특정한 값을 가져오고 싶다면 다음 아래처럼 가져올 수 있습니다.
reponse.context['name']


  • Content-Type이 application/json일 때 .json.loads() 혹은 .json()['name']으로 가져 올 수 있습니다.
response.json.loads()
# or
response.json()['name']


참고자료