Django 테스트 프레임워크는 매우 간단하며, 선호되는 방법은 Python 표준 라이브러리에 있는 unittest 모듈을 사용하는 것입니다.
테스트 작성
Django의 단위 테스트는 클래스 기반 접근 방식을 사용하여 테스트를 정의하는 Python의 단위 테스트 모듈을 사용합니다. 클래스 이름은 django.test.TestCase이며 Python의 unittest.TestCase에서 상속됩니다.
from django.test import TestCase from myapp.models import Animal class AnimalTestCase(TestCase): def setUp(self): Animal.objects.create(name="lion", sound="roar") Animal.objects.create(name="cat", sound="meow") def test_animals_can_speak(self): """Animals that can speak are correctly identified""" lion = Animal.objects.get(name="lion") cat = Animal.objects.get(name="cat") self.assertEqual(lion.speak(), 'The lion says "roar"') self.assertEqual(cat.speak(), 'The cat says "meow"')
테스트를 실행할 때 테스트 프로그램은 test로 시작하는 모든 파일에서 모든 테스트 사례(inittest.TestCase의 하위 클래스)를 검색합니다. 자동으로 테스트 세트를 구축한 다음 테스트를 실행합니다.
참고: 테스트가 데이터베이스 액세스(모델 읽기, 쿼리)를 기반으로 하는 경우, unittest.TestCase 대신 django.test.TestCase를 사용하여 테스트 클래스를 생성해야 합니다.
테스트 실행
디렉토리에 있는 모든 테스트 실행(모든 test*.py 파일):
$ python Manage.py test
동물 테스트 실행 프로젝트 아래의 테스트 패키지:
$ python Manage.py test Animals.tests
동물 프로젝트에서 테스트 테스트 실행:
$ python Manage.py test Animals
개별 테스트 사례 실행:
$ python Manage.py test Animals.tests.AnimalTestCase
개별 테스트 메서드 실행:
$ python 관리 .py test Animals.tests.AnimalTestCase.test_animals_can_speak
테스트 파일 경로 제공:
$ python Manage.py test Animals/
와일드카드 테스트 파일 이름:
$ python Manage.py test --pattern="tests_*.py"
경고 활성화:
$ python -Wall Manage.py test
데이터베이스
테스트에는 데이터베이스가 필요하며, django는 테스트를 위해 별도의 데이터베이스를 생성합니다. 테스트 통과 여부에 관계없이 모든 테스트가 실행되면 테스트 데이터베이스가 삭제됩니다.
기본적으로 테스트 데이터베이스 이름은 test_DATABASE_NAME이고 DATABASE_NAME은 settings.py에서 구성한 데이터베이스 이름입니다. 테스트 데이터베이스에 다른 이름을 지정해야 하는 경우 설정에서 TEST_DATABASE_NAME 값을 지정하세요. 파이. sqlite3을 사용하면 데이터베이스가 메모리에 생성됩니다.
데이터베이스가 별도로 생성된다는 점을 제외하면 테스트 도구는 DATABASE_ENGINE, DATABASE_USER, DATABASE_HOST 등 동일한 데이터베이스 구성을 사용합니다. 테스트 데이터베이스를 생성한 사용자는 DATABASE_USER(설정에서)로 지정되므로 DATABASE_USER에게 데이터베이스를 생성할 수 있는 충분한 권한이 있는지 확인해야 합니다.
테스트 실행 순서
모든 테스트가 깨끗한 데이터베이스에서 시작되도록 하기 위해 실행 순서는 다음과 같습니다.
1. 모든 TestCase 하위 클래스가 먼저 실행됩니다.
2. 기타 모든 단위 테스트(unittest.TestCase, SimpleTestCase, TransactionTestCase).
3. 기타 테스트(doctest 등)
가속 테스트
PASSWORD_HASHERS를 더 빠른 알고리즘으로 설정할 수 있습니다:
PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.MD5PasswordHasher', )