본문 바로가기

소프트웨어 이야기/테스트 자동화

[Django]Django 테스트코드 라이브러리 unittest VS pytest

Django를 시작하면서 파이썬 테스트코드 라이브러리를 찾아봤었다. 파이썬에서는 unittest와 pytest가 많이 사용되는 편이였다

Ruby On Rails의 Rspec 같은 BDD + Unit Test 라이브러리를 찾아봤는데, 마음에드는 라이브러리를 찾지 못했다. ( 예를 들면, mamba라는 라이브러리가 있었는데, 대중적이지 않아 보여서 믿음직하지 않았다 )


Unittest와 Pytest 간단 소개 

이 둘은 테스트코드를 함수단위로 작성하는 Unit Test 툴이다. 

unnitest는 파이썬 표준 라이브러리에 포함된 라이브러리다. 

pytest는 2007년에 첫 커밋되었고, 계속 활발하게 커밋되고 있는 라이브러리다. 그리고 unitest로 작성된 테스트코드와 호환된다. 

But. pytest 전용으로 작성된 테스트코드는 unittest에서 돌릴 수 없다. 


그래서 둘중 뭘쓸까?

pytest! 

pytest가 장고 개발자들이 제일 좋아하는 프레임워크라고 한다. ( slant - nittest vs pytest )


unittest가 파이썬 표준 라이브러리라는 점을 제외하고는 pytest가 모든면에서 낫단 글도 봤었다. ( 래빗 - unittest vs pytest )



왜 Unittest보다 Pytest를 쓰는게 더 나을까?

파이콘 2017 ) 이썬에서 편하게 테스트 케이스 작성하기: pytest, Travis CI, Docker 자료를 보면 좀 쉽게 이해된다. 

( 이 글은, 파이콘 자료를 참고했습니다 :) )

  pytest와 unittest의 대략적인 느낌! 


1. unittest는 보일러플레이트코드가 많은 편이다. 

   클래스를 작성할 때마다 unittest.TestCase 클래스를 상속받아야한다거나, 

   assert 비교문도 assertEqual() 함수를 써줘야한다거나.


2. pytest는 fixture를 별도의 함수로 분리해서 관리하고, 필요한 테스트 케이스에서만 호출해서 사용할 수 있다. 

    fixture를 모듈화, 재가공, 재사용 등이 쉽다!


3. pytest가 테스트코드 결과도 좀더 상세하게 보여준다.

     


아무튼... 상세한 내용은 파이썬에서 편하게 테스트 케이스 작성하기: pytest, Travis CI, 그리고 도커를 참고하면 된다. 


그래서~~

난 pytest를 쓰기로 했다. 



Django 테스트코드 작성 참고 자료! 

django에서 pytest를 작성하기 동영상 - The Django TDD Cookbook

django에서 사용할만한 테스트코드 라이브러리 아이디어 - 브런치 ) 코드커버리지 80% 넘긴 썰

FactoryBoy로 테스트 목데이터 만들기 - Mocking database calls in Django view tests

실제 pytest 테스트 코드 샘플 참고하기 - https://github.com/FlowFX/sturdy-potato