본문 바로가기
IT/Django

APIClient와 APIRequestFactory의 차이

by Cyber_ 2024. 10. 9.

Django Rest Frameworkd(DRF)에서는 API를 테스트할 때 사용할 수 있는 여러 유틸리티를 제공하는데, APIClient와 APIRequestFactory는 그 중에서도 가장 자주 사용되는 도구입니다. 각각의 사용 목적과 기능적 차이를 아래와 같이 설명하려 합니다.

1. APIClient

APIClient 는 DRF의 테스트를 위한 가장 강력한 도구 중 하나로, 완전한 웹 브라우저와 유사한 방식으로 작동합니다. 즉, 클라이언트는 HTTP 요청을 서버에 보내고 응답을 받는 과정을 시뮬레이션할 수 있습니다. APIClient를 사용하면 인증, 쿠키, 세션 등의 상태를 관리하면서 HTTP 메서드(GET, POST,PUT, DELETE 등)를 통한 요청을 손쉽게 만들 수 있습니다.

from rest_fraework.test import APIClient

client = APIClient()
response = client.get('/api/path/, format='json')

장점: 인증된 사용자로의 요청 시뮬레이션, 세션과 쿠기 지원, 다양한 HTTP 메서드 사용 가능
적합한 사용 경우: 브라우저에서의 사용자 인터랙션을 모방할 필요가 있을 때, 예를 들어 로그인 세션을 통한 요청이나 인증 토큰을 사용한 API 접근 테스트 등

2. APIRequestFactory

APIRequestFactory는 APIClient보다 더 낮은 수준에서 작동합니다. 이 도구는 요청 객체를 생성하고 이를 뷰에 직접 전달하는데 사용됩니다. 즉, 요청을 만들고 직접 뷰 함수나 이를 뷰에 직접 전달하는 데 사용됩니다. 즉, 요청을 만들고 직접 뷰 함수나 뷰 클래스에 전달하여 그 결과를 확인할 수 있습니다. APIRequestFactory는 APIClient와 달리 상태를 유지하지 않으므로 인증 상태나 쿠키, 세션을 직접 관리해야 합니다.

from rest_framework.test import APIRequestFactory

factory = APIRequestFactory()
request = factory.get('/api/path')
response = view(request)

장점: 요청 객체를 직접 만들고 컨트롤 가능, 빠른 테스트 실행, 세션 및 쿠키를 별도로 관리하지 않고도 테스트 가능
적합한 사용 경우: 특정 뷰 함수나 클래스에 대한 단위 테스트를 진행할 때, 복잡한 상태 관리나 인증 없이 간단한 요청-응답 사이클을 테스트 하고 싶을 때