Django ORM
Django ORM Cookbook
질의 횟수 확인
- 장고 단위 테스트 클래스의
assertNumQueries()
메서드를 사용하여 데이터베이스에 발생하는 질의 횟수를 검증할 수 있음
def test_number_of_queries(self):
User.objects.create(username='testuser1', first_name='Test', last_name='user1')
self.assertNumQueries(1)
User.objects.filter(username='testuser').update(username='test1user')
self.assertNumQueries(2)
데이터베이스 재사용
python manage.py test
명령을 실행할 때마다 데이터베이스가 새로 생성
- 이것은 마이그레이션이 많지 않을 때는 문제가 되지 않지만 마이그레이션이 많아질수록 테스트 실행 시 데이터베이스 재생성에 많은 시간을 소요하게 됨
- 이런 상황을 피하기 위해 이전에 생성된 데이터베이스를 재사용할 수 있음
- 테스트 명령에
--keepdb
플래그를 추가하여 데이터베이스가 삭제되는 것을 방지하고 테스트 실행 간 데이터베이스를 유지할 수 있음
- 데이터베이스가 존재하지 않으면 데이터베이스를 새로 생성
- 마지막 테스트 실행 이후 마이그레이션이 추가되었으면 최신 상태를 유지하기 위해 마이그레이션을 수행
$ python manage.py test --keepdb
모델 객체를 데이터베이스에서 읽기
refresh_from_db()
메서드를 사용하여 데이터베이스에서 모델을 다시 읽어들일 수 있음
- 값을 갱신하는 테스트를 작성할 때 유용한 기능
class TestORM(TestCase):
def test_update_result(self):
userobject = User.objects.create(username='testuser', first_name='Test', last_name='user')
User.objects.filter(username='testuser').update(username='test1user')
userobject.refresh_from_db()
self.assertEqual(userobject.username, 'test1user')