본문 바로가기
Computer Science/Programming

[Test] python 테스트코드의 필요성(feat.pytest)

by 카프리썬 2022. 3. 23.
728x90

테스트의 무한굴레

테스트 코드를 알기전.. 나는 정말 아마추어스럽게 테스트 했다..

코드를 수정하고, 서버를 동작시키면서, 수정한내용이 오류가 없는지 계속계속 봤다..

테스트를 할 때마다 디비에 접속해야했고, 

특히나 수정하는 작업이 디비의 결과값에 영향을 주는 경우 계속해서 다시 원복을 시켰다...

이렇게 테스트의 무한 굴레에 직접 빠져보니까 정말 시간도 너무 오래걸리고 뭔가 비효율적임을 느꼈다.

계속해서 아 이게 맞나..? 라는 생각에 같은 작업만 반복하는 기분이 들었다. 

 

 

반응형

 

테스트코드의 필요성

이렇게 배포를 하면서 느낀점은 나도 내가 짠 코드를 못 믿겠다는것이다.

그래서 계속 배포를 할때마다 긴장을 했다. 이번에도 실패하면 어쩌지?하면서..

그런데 생각해보니 애초에 꼼꼼한 테스트를 했다면 이런 불안과 걱정은 없었을것 같았다. 

믿음직한 코드, 불안하지 않은 코드. 

 

처음에는 테스트코드를 굳이 만들어야하나? 라는 생각이 들었다.

뭐 간단한건데 그렇게까지? 

그렇다. 자만이였다.

진작에 처음부터 테스트코드 작성해서 테스트했다면

이렇게 무한 테스트굴레에 빠지지 않았을텐데 말이다.

급할수록 돌아가라....테스트코드로 돌아가라..

 

테스트코드를 작성해서 테스트를 했다면..

코드를 수정하고, 테스트코드를 실행해서 그 결과만 보고 확인했으면 됐을 것이다.

그러면 로컬 테스트환경을 구축하고, 서버 동작시키는 그런 인프라 적인 에러도 전혀 신경쓰지 않았어도 되었을것 같다. 

 

테스팅 프레임워크 : pytest vs unittest 

테스트 코드를 작성하기 위한 대표적인 프레임워크는 pytest랑 unittest가 있다. 

이글을 참고해서 두 프레임워크의 차이점을 간단하게 정리해볼 수 있다. 

 

pytest 

  • 픽스쳐 문법이라고 기존 테스팅 프레임워크와 독특한 다른방식
  • flask, pip , requests에서 주로 사용
  • assert문으로 성공/실패 여부를 확인할 수 있음
  • 클래스문 없이 간단하게 테스트 함수만 정의하면 되서 편리

unittest

  • 자바의 JUnit 테스팅 프레임워크로부터 영향받음
  • 테스트를 작성하기 위해 반드시 클래스를 정의해야한다.
  • 파이썬 내부테스트나 django에서 주로사용 
  •  카멜케이스 네이밍방식 (python default방식은 언더스코어)

 

 

 

 

 

 

 

이런 특징들을 기반으로 나는 pytest를 선택했다.

간단한 테스크 코드를 작성하는데 클래스까지 작성하는건 부담이였고, 코드가 간결했으면 좋겠어서이다!

 

 

pytest 설치

unittest는 파이썬에 내장되어 있어서 별도의 설치가 필요하지 않지만, pytest는 install 이 필요하다.

pytest 설치 : pip install pytest

 

공식문서 : https://docs.pytest.org/en/stable/ 

 

pytest: helps you write better programs — pytest documentation

pytest: helps you write better programs The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. pytest requires: Python 3.7+ or PyPy3. PyPI package name: pytest

docs.pytest.org

 

테스트코드 작성 및 테스팅 example

간단하게 example을 작성해보았다. 

테스트해볼 함수는 fun(x)이고, 테스트코드는 test 라는 접두사로 시작하는 함수이다.

그리고 해당 코드가 있는 디렉토리에 들어가 아래와 같은 명령어로 테스트를 진행해볼 수 있다. 

pytest 파일명.py

테스트가 성공할 경우 나타는 결과

만약, 테스트 코드를 assert func(3)==5 로 수정하고 테스팅을 수행할 경우 아래와 같은 실패결과가 나타난다.

테스트가 실패할 경우 나나타는 결과

 

그리고 참고로, print된 결과도 보려면 pytest -s 파일명.py

반응형

$(document).ready(function() { var $toc = $("#toc"); $toc.toc({content: ".tt_article_useless_p_margin", headings: "h2,h3,h4"}); });