해피 코딩!

pytest를 사용하는 이유 본문

Django

pytest를 사용하는 이유

지속가능한 성장을 2020. 11. 23. 19:13

틀리다고 생각하시는 부분을 지적해주세요! 피드백을 환영합니다!

적용 프로젝트

pytest를 사용하는 이유

# 장고 기본 테스트코드 동작
./manage.py test

# pytest 설치
pip install pytest, pytest-djagno


내장되어있는 장고 기본 테스트는 프로덕션에 있는 데이터베이스와는 별개의
클린한 디비를 생성해낸다.

sqlite는 별 다른 의미가 없지만
postgres, mysql은 동작속도가 더 빠른 대신 초기 세팅이 더 오래걸린다. 
디비 생성이 더 오래걸린다는 뜻
단순한 데이터베이스를 생성하는 시간이 아닌, postgres 프로그램을 새로 키는 수준의 자원이 소요된다.

매번 이런 시간을 소요하긴 어렵다.

그래서 pytest가 사용된다. 

django 랑 pytest를 사용하게 되면 더 빠른 테스트코드 작성이 가능하다.

Coverage

테스트코드를 실행했을 때, 전체 소스 코드중 몇 %가 실행되었는지를 확인할 수 있다.

테스트코드의 실행 결과를 파일로 만들어준다. (.coverage)

이 프로그램이 완벽한가를 나타내는 기준이 아닌, 이 프로그램이 테스트코드를 작성했고, 전체 소스 코드에서 어느정도의 영역을 동작시켰는지 확인할 수 있는 모듈이다.

100%니까 완벽한 라이브러리가 아닌, 테스트코드를 얼마나 잘 짯는지가 더 중요하다.

coverage 실행

  • coverage run --source'.' app/manage.py test or coverage run --source'app' app/manage.py test

    • 이렇게 하면 테스트코드를 읽지 않는다. 왜인지 문서를 읽어보았지만 찾지 못하였습니다.
  • coverage run app/manage.py test <app_name> 하면 해당 테스트 코드를 읽음.

  • coverage report -m 결과 보기

굳이 볼 필요가 없는 코드들이 있다.

  • /root/.coveragerc 생성 매칭 파일은 ini
# coveragerc 예시이며 문서에서 제공합니다.
# 프로젝트 구조 PROJECT/app/conifg/settings.py
[run]
source =
    app

omit =
    app/manage.py
    app/config/asgi.py
    app/config/wsgi.py
    app/*/migrations/*
    app/*/migrations/*

[report]
exclude_lines =
    def __str__
    def __repr__
    if settings.DEBUG
    return super()
    raise AssertionError

codecov

codecov.io에 테스트 리포트를 쉽게 업로드 할 수 있도록 도와주는 라이브러리

pytest-cov

pytest를 사용해서 codecov.io 에 업로드 할 리포트를 만들어주는 라이브러리

# 프로젝트 구조 PROJECT/app/conifg/settings.py
pip install codecov pytest-cov

pytest --cov app

# git repo Settings/ Secrets/ new_secret

CODEDOV_TOKEN=<codecov.io Token> codecov

'Django' 카테고리의 다른 글

Django form 정리  (0) 2021.01.14
Django의 쿼리와 데이터베이스 레이어  (4) 2020.12.18
Django를 사용하게 된 이유  (0) 2020.12.15
Django 구성에 대한 이해  (0) 2020.11.23
WS, WAS - Nginx, uWSGI  (0) 2020.11.23
Comments