【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
- https://wikidocs.net/80337
- https://jiyeonseo.github.io/2020/03/10/pytest/
- https://semaphoreci.com/community/tutorials/testing-python-applications-with-pytest
- 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
- 나중에 필요하면, 공부하자. 지금은 아니다.