AI 웹 개발 과정/DRF 특강

DRF 테스트 코드 작성하기 1

만 기 2022. 7. 11. 21:45

 

* 테스트 코드

작성한 코드들이 원하는 값을 내놓는지 확인하는 코드

TDD 테스트 주도 개발

 

unittest

유닛테스트 모듈 :  파이썬에 내장되어있는 테스트 라이브러리

 

APIRequestFactory

 

기본 테스트 코드 예시

from django.test import TestCase

# Create your tests here.
class TestView(TestCase):
    # def test_two_is_three(self):
    #     self.assertEqual(2,3)			# 결과 : AssertionError: 2 != 3 # FAILED (failures=1)
    
    def test_two_is_two(self):
        self.assertEqual(2,2)			# 결과 : OK

생성한 어플리케이션 폴더에 tests.py 파일이 생성되어있고 해당 파일에 작성한다.

 

assertEqual()

reverse("url_name")

client.post

 

test 메소드를 실행할때마다 장고는 테스트 db를 초기화한다.

=> 두가지 함수를 독립적으로 실행할 수 없음

=> setUp 메소드 활용예시.

class YourTestClass(TestCase):
    def setUp(self):
        # Setup run before every test method.
        pass

    def tearDown(self):
        # Clean up run after every test method.
        pass

    def test_something_that_will_pass(self):
        self.assertFalse(False)

    def test_something_that_will_fail(self):
        self.assertTrue(False)

참조 : https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/Testing

 

Django 튜토리얼 파트 10: Django 웹 어플리케이션 테스트하기 - Web 개발 학습하기 | MDN

Writing test code is neither fun nor glamorous, and is consequently often left to last (or not at all) when creating a website. It is however an essential part of making sure that your code is safe to release after making changes, and cost-effective to mai

developer.mozilla.org

 

 

회원가입, 로그인 테스트 코드 작성

from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
from users.models import User

class UserRegistrationTest(APITestCase):
    def test_registration(self):
        url = reverse("user_view")
        user_data = {
            "username": "testuser",
            "fullname": "테스터",
            "email": "test@testuser.com",
            "password": "password",
        }
        response = self.client.post(url, user_data)
        print(response.data)    # views.py 의 post메서드에서 return으로 받는 response
        self.assertEqual(response.status_code, 200)

    # def test_login(self):
    #     url = reverse("token_obtain_pair")
    #     user_data = {
    #         "username": "testuser",
    #         "fullname": "테스터",
    #         "email": "test@testuser.com",
    #         "password": "password",
    #     }
    #     response = self.client.post(url, user_data)
    #     print(response.data)   
    #     self.assertEqual(response.status_code, 200)

    # => 회원가입 테스트 코드에서 실행한 내용이 저장되지않으므로
    # => 로그인 테스트 코드 실행시 에러가 발생한다.
    # => 따라서 setUp 메소드를 활용한다.

class LoginUserTest(APITestCase):
    def setUp(self):
        self.data = {'username':'john', 'password':'johnpassword'}
        self.user = User.objects.create_user('john','johnpassword')

    def test_login(self):
        response = self.client.post(reverse('token_obtain_pair'), self.data)
        print(response.data["access"])
        self.assertEqual(response.status_code, 200)

 

 

테스트의 대상은 장고 프레임워크 내에서 지원하는 코드는 안되고, 어플리케이션의 views.py 에서 작성한 코드가 대상이어야한다.

'AI 웹 개발 과정 > DRF 특강' 카테고리의 다른 글

django-dotenv  (0) 2022.07.30
DRF JWT 사용하기  (0) 2022.07.27
DRF 를 이용한 JWT 사용하기  (0) 2022.06.27
DRF 퀴즈2  (0) 2022.06.24
DRF 복습 퀴즈  (1) 2022.06.23