Tox: Python Test Automation Framework

Tox는 Python 프로젝트에 대한 테스트 자동화를 지원해주는 도구이다. Python 2 또는 3 등 다양한 환경에서의 테스트를 지원하고자 virtualenv를 기반으로 테스트 환경을 구성하고, 사전에 지정한 대로 테스트를 진행할 수 있게끔 해준다. Tox는 아래와 같이 tox.ini파일을 기반으로 설정하게 된다.

  • tox.ini
# content of: tox.ini , put in same dir as setup.py
[tox]
envlist = py27,py36

[testenv]
# install testing framework
# ... or install anything else you might need here
deps = pytest
# run the tests
# ... or run any other command line tool you need to run here
commands = pytest

설정

Tox의 동작을 보다 잘 이해하기 위해 우선 tox.ini파일의 내용을 살펴보자.

[tox]
envlist = py27,py36
install_command = pip install {opts} {packages}

가장 먼저 실행할 환경 목록을 기술한다. 위 설정 파일에서는 python 2.7/3.6을 지정하고 있다. 기본적으로 제공하고 있는 환경 목록은 아래와 같다.

py, py2, py27, py3, py34, py35, py36, py37, py38, jython, pypy, pypy2, pypy27, pypy3, pypy35

위의 목록 중 py 의 경우 tox를 실행한 Python version을 사용하게 된다.

다음으로 [testenv] 항목에는 모든 환경에서 공통적으로 실행할 설정들을 기술한다.

[testenv]
# python interpreter
basepython =
   py26: python2.6
   py27: python2.7
# install testing framework
# ... or install anything else you might need here
deps = pytest
# run the tests
# ... or run any other command line tool you need to run here
commands = pytest

다음으로 특정 환경을 지정하여 추가적으로 더할 설정들을 기술한다. 이를 위해 [testenv:NAME]와 같이 환경 이름을 지정한다. 각 필드 별로도 환경 이름이나 부분 문자열을 지정하면, tox가 매칭되는 환경을 찾아 지정한 설정을 적용한다.

deps =
    pytest
    django15: Django>=1.5,<1.6
    django16: Django>=1.6,<1.7
    django17: Django>=1.7,<1.8
    django18: Django>=1.8,<1.9
    py26: unittest2

위의 예제는 환경 이름이 django15이거나 해당 문자열이 포함되는 경우 Django>=1.5,<1.6이 설치되도록 설정한 것을 보여준다.

설치되어야 하는 패키지가 많은 경우 pip를 사용하듯이 requirements.txt를 지정할 수 도 있다.

deps =
    -r{toxinidir}/test-requirements.txt

commands에는 테스트를 실행하기 위한 명령을 기술한다.

commands =
    python test.py

기본적으로 모든 commands{toxinidir} 즉, tox.ini파일이 존재하는 디렉토리에서 실행된다. 이 때 작업 디렉토리를 변경하고 싶다면 changedir에 명시하면 된다.

[testenv:docs]
changedir = docs
deps =
    sphinx
commands =
    sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html
basepython = python3.7

이 외의 다양한 설정은 공식 문서(https://tox.readthedocs.io/en/latest/config.html)를 참고한다.

실행 방법

간단히 아래와 같이 실행하면 전체 테스트를 수행하게 된다.

tox

특정 환경을 지정해서 실행할 수 있다.

tox -e py27

만약 패키지 설치를 포함하여 환경을 재구성하고 싶다면 다음과 같이 실행한다.

tox -r

참고 자료