【Python-Module】Pytest Module study

  • pytest는 패키지를 완성하는 동안, 하나의 .py파일을 test하는 하나의 좋은 모듈이다.

  • pytest이전에는 assert 기반의 unittest (wiki-unitest)가 많이 사용되었지만, 최근에 와서는 pytest가 더 편리해서, 더 많이 사용되는 듯 하다. (pypi에서 검색을 해봐도, unittest는 최근 update가 2015이고, pytest는 2021년이다. 또한 raddit에서도 ‘just use pytest’라고 한다.)
  • 이 Pytest에 대해 공부해보자.
  • 그럼에도 불구하고, detectron2와 mmdetection에서는 unittest를 사용한다. 하지만 연구실 석박사 선배님들이 Unit Test 모듈을 사용하시는 것 같지는 않다. 필요하면 그 때 찾아서 공부해, 보도록 하자.

1. Referece

  1. https://wikidocs.net/80337
  2. https://jiyeonseo.github.io/2020/03/10/pytest/
  3. https://semaphoreci.com/community/tutorials/testing-python-applications-with-pytest
  4. https://docs.pytest.org/en/latest/contents.html : Pytest가 정말 절실히 필요하다고 느껴질 때, 이 공식 문서로 다시 공부하자. 혹은 취미로 조금씩 공부해 놓으면 나중에 많은 도움이 될 듯 하다.

1.1 Level up Python - pytest

  • Unit Test 란?
    유닛이란 보통 함수 단위라고 생각하면 좀 더 이해가 될 겁니다. 프로그램은 결국 데이터와 이를 처리하는 함수로 구성되는데 각 함수를 충분히 테스트하면 전체 프로그램에서 문제가 발생하는 것을 최소화할 수 있을겁니다. 그래서 함수를 구현한 후 함수의 입력과 예상되는 출력을 비교함으로써 함수를 테스트하는 겁니다.

  • 이 글을 통해서, Pytest는 디버깅을 하면서, 각 변수에는 어떤 type size(view) length 를 가지는지 확인하는 방법이 아니다. 라는 것을 깨달았다. 코드 내부에 구현한 함수 or 클래스가 잘 통작하는지? 어떤 인풋에 대해서 내가 원하는 Output이 나온지? 확인하는 모듈인 것 같다.

  • 사용예시 코드

    # mymath.py
    def average(a):
        return sum(a) / len(a)
      
    # test_mymath.py
    from mymath import average
    def test_average():
        assert average([1, 2, 3]) == 2 # assert 사용해야하는 듯
      
    # terminal
    $ pytest [-v] [-c <filename>] 
    
  • (-c 옵션을 하지 않으면) pytest를 실행한 pwd에서 test_ 접두사 , _test 접미사 를 붙인 파일을 자동으로 test하고, assert 결과가 Ture면 그냥 pass. False면 내부 변수가 뭐여서 false가 발생했는지 출력해준다.

1.2 빠르게 시작하는 pytest

  • 나중에 필요하면, 공부하자. 지금은 아니다.

© All rights reserved By Junha Song.