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