【Python】toxで複数のPythonバージョンをテストする

f:id:tm200:20220221223803p:plain

Pythonのテストコードを実行する際に、複数のPythonバージョンで動作確認したい時があり、toxの設定が便利だったので備忘メモ。

インストール

$ pip3 install tox

tox.ini

設定ファイルにlinttestの設定を記載できます。
波括弧で複数バージョンの指定が可能です。
また、lintのルールをflake8の引数で変更可能です。

[tox]
envlist = py3{7,8,9}-{lint,test},coverage-report

[testenv]
setenv =
    COVERAGE_FILE = .coverage.{envname}
changedir = {toxinidir}/tests
install_command = \
    pip install \
    --index-url=https://xxx.xxx.xxx:8000/xxx \
    --trusted-host=xxx.xxx.xxx {opts} {packages}

deps = 
    pytest
    pytest-cov
    coverage
    mock

commands =
    pytest --cov . {posargs}

[lint]
changedir = {toxinidir}
skip_install = True
deps =
    readme_renderer
    flake8
    flake8-import-order
    pylint
    mock
    pytest

commands =
    flake8 --import-order-style=pep8 --max-complexity=11 --max-line-length=120 <モジュールのディレクトリ名> (setup.py, testsなども指定可能)

[testenv:py37-lint]
skip_install = {[lint]skip_install}
changedir = {[lint]changedir}
deps = {[lint]deps}
commands = {[lint]commands}

[testenv:py38-lint]
...py37と同様

[testenv:py39-lint]
...py37と同様

実行方法

PRなどをトリガーに、CICDのパイプラインで各Pythonバージョンのコンテナを起動して、テストを自動実行するようにするとGood😎

#lint
$ tox -e py38-lint

# test
$ tox -e py38-test