파이썬에서 편하게 테스트 케이스 작성하기: pytest, Travis CI, 그리고 도커

  • Best Practices & Patterns
  • Difficulty Intermediate
  • 2017-08-12 (토요일) 13:40 - 14:20
  • 한국어
  • 103
  • Photography and recording is allowed

Slide

https://speakerdeck.com/adrysn/paisseoneseo-pyeonhage-teseuteu-keiseu-jagseonghagi-pytest-travis-ci-docker

Video

https://www.youtube.com/watch?v=rxCjxX4tT1E

Description

Python에는 unittest라는 단위 테스트를 위한 모듈이 포함되어 있다. unittest 모듈은 단위 테스트 작성에 필요한 다양한 decorator와 assertion 메소드, mocking 방법 등을 제공한다.

단위 테스트는 기본적으로 다른 테스트와 독립적으로 돌아가야 한다. 하지만 테스트 규모가 커질수록 서로 다른 테스트에서 공통되는 테스트 코드나 테스트 자원을 사용하게 되는 경우가 많아지는 것도 사실이다. 테스트의 독립성을 지키면서 중복 자원 재사용을 최대화하는 문제는 unittest 모듈만을 이용해서 다루기에는 어려운(또는 지저분한) 측면이 있다.

pytest는 더 나은 테스트 케이스 작성을 도와주는 파이썬 테스트 도구이다. pytest의 장점은 크게 두 가지 측면에서 찾을 수 있다. fixture 모듈과 플러그인을 통한 확장성이다. pytest는 중복되는 코드 또는 자원을 fixture라는 함수로 빼내 모듈화한다. 어떤 테스트 함수에서 필요한 fixture를 사용하기 위해서는 테스트 함수의 인자에 fixture 이름을 써주기만 하면 된다. 즉 fixture로 묶인 자원을 dependency injection 형태로 테스트 함수에 끼워 넣는 식이 되는데, 각 테스트 케이스에서는 필요한 자원만 선택적으로 골라 사용할 수 있다. 이를 통해 테스트의 독립성을 유지하면서도 테스트 자원의 재사용률을 쉽게 올릴 수 있다. 또한, pytest는 확장성이 아주 좋아서 다양한 플러그인을 제공한다. 예를 들어, pytest-django 플러그인은 Django의 서버 테스트를 위한 db 및 서버 관련 자원을 fixture 형태로 제공하는데, 이를 이용하면 더욱 간단하게 Django 테스트 케이스를 작성할 수 있다. 비동기 코드의 테스트 케이스를 작성하는 일은 특히 까다로운 편인데, 이 경우에도 각종 관련 pytest 플러그인을 사용하면 좀 더 편한 테스트를 작성할 수 있다.

이번 발표에서는 기본 unittest 대비 pytest의 장점에 대해 이야기 하고자 한다. 이에 더해 작성한 테스트를 자동화해서 실행할 수 있는 Travis CI에 대해 간략하게 설명하고, 도커 컨테이너화한 테스트 케이스 실행 환경을 Travis CI를 통해 자동화해본 개인적인 경험에 대해서도 짧게 소개하고자 한다.

이 발표는 pytest라는 파이썬 외부 패키지에 대해 다루므로, 파이썬 테스트 케이스 작성 경험이 있는 청중을 대상으로 한다. 뒷부분에 Travis CI와 도커관련 내용이 들어가는데, 도커 이미지와 컨테이너에 대한 기본적인 지식이 있으면 좀 더 쉽게 이해할 수 있을 것으로 생각한다 (필수는 아님). 이미 테스트와 빌드 자동화에 대한 경험이 많은 개발자는 대상이 아니다. 이 발표를 통해 테스트 케이스를 작성해보기는 했으나 더이상 무엇을 어떻게 해야할지 고민하고 있는 초보 테스터들에게 좀 더 강력하고 편한 테스트 개발 환경을 소개할 수 있기를 기대한다.

Comments

blog comments powered by Disqus

Sponsors

플래티넘

골드

실버

브론즈