1. 여러개의 데이터베이스를 사용할 때
프로덕트에서 부하 부담의 이유로 replica 데이터베이스를 사용하고 있고 테스트 데이터 베이스를 따로 사용하고 있다면 제대로 테스트가 돌아가지 않을 수 있다. 데이터가 작성되는 곳은 마스터 데이터베이스이고 읽어올때는 replica 데이터 베이스에서 읽어오기 때문이다. 물론 테스트 데이터베이스도 동일하게 구성 할 수 있지만 온갖 설정을 피하고 싶을때 아래처럼 사용하면 된다.
@pytest.fixture(autouse=True)
def mock_BaseManager(mocker):
mocker.patch(
"companies.models.Company.objects.using",
return_value=Company.objects.using("default"),
)
return
2. post 데이터에 리스트를 보낼 때
아무리 리스트를 보내도 API에서 하나만 인식하는 문제가 있었다. 이럴 때는 꼭 content_type을 작성하도록 하자.
res = client.post(
SOMEWHERE_URL,
data={
"age": 100,
"dune_list": ['dune1', 'dune2', 'dune3', 'dune4']
}, content_type='application/json', # 이거 찾느라 꽤 고생했다.
)
3. 특정 테스트만 실행하고 싶을 때
테스트를 작성할 때 마다 파일내에 모든 테스트를 실행시키는건 불합리하다. 아래명령어를 통해 하나의 테스트만 실행하자.
pytest this/is/test_file/directory/test_abc.py::test_function
4. 테스트를 하면서 출력을 보고 싶을 때
pytest -s 테스트/디렉토리/
5. 경우의 수를 작성해야할 때
테스트를 작성하다보면 여러가지 요소들을 다양한 조합으로 테스트 해야할 때가 있다. 아래와 같이 parametrize를 사용해보자
@pytest.mark.parametrize('country' , ['한국', '일본','중국', '미국'])
@pytest.mark.parametrize('sex',['남성','여성','기타'])
@pytest.mark.parametrize('age', [f'{i}대' for i in range(1, 10)])
def test_something(country, sex, age):
print(country, sex, age)
assert True
위와 같이 작성하면 총 4*3*9 의 테스트를 작성할 수 있다.
'Web Programming > Django' 카테고리의 다른 글
[Django] 장고 비즈니스 로직 어디둬야하는 고민하는 사람들 드루와.. (0) | 2022.08.23 |
---|---|
[Django] Django MySQL Fulltext Index 설정 (0) | 2021.11.07 |
[DRF] Serializer Validation (0) | 2021.10.10 |
[Django] Aggregate와 Annotate (5) | 2021.07.14 |
[Django] python manage.py를 하면 무슨 일이?(runserver 편) (0) | 2021.05.20 |