ホームページ >バックエンド開発 >Python チュートリアル >Poetry、Tox、Nox、CI/CD を使用してプロのように Python コードをテストする
こんにちは!
Python プロジェクトを持っていて、それが世の中のすべてのバージョンの Python で動作することを確認する必要がありますか?信じてください、それは大きな頭痛の種になる可能性があります。でも心配しないでください、私があなたの背中を支えています。このガイドでは、Tox、Nox、および CI/CD という素晴らしいツールを使用して、複数の Python バージョン間でコードをテストする方法を説明します。
それでどうなるでしょうか?思ったよりも簡単です。
これを読み終わる頃には、Python 3.8 から 3.13 までプロのようにテストを実行できるようになっているでしょう。私たちは物事をシンプルで楽しく、そして完全に実行可能なものにしていきます。いいですね?それでは、詳しく見ていきましょう。
これを想像してください: クールな Python コードを作成すると、それがコンピューター上で動作します。しかし、それでは、バム!ユーザーから、Python 3.9 では機能しないという内容のメールが届きました。試してみると、確かに何かが違います。
なぜ?
Python にはこれらすべてのバージョンがあり、それぞれに癖があるからです。コードを複数のバージョンでテストしないと、何も考えずに行動することになります。
しかし、良いニュースは、多数の Python バージョンを手動でインストールし、それぞれに対してテストを実行する必要がないことです。そこにトックスとノックスがスーパーヒーローのように急襲してきます。
詳しく見てみましょう:
Tox: さまざまな Python 環境でコードをテストするロボットと考えてください。これは非常に体系化されており、単純な tox.ini ファイルの指示に従います。 Tox に何をすべきかを指示すると、Tox はそれを実行します。
Nox: Tox に似ていますが、ある意味ではよりクールです。なぜ?構成ファイルの代わりに Python スクリプト (noxfile.py) を作成できるためです。カスタム ロジックや条件を追加したいですか? Nox があなたの味方です。
では、どちらが良いのでしょうか?正直なところ、それは状況によります。きちんとしていて単純なものが好きなら、Tox を選んでください。あなたがクリエイティブなタイプで柔軟性を好む人には、Nox がぴったりです。
これが取引です:
2 つの単純な関数を含むミニプロジェクトを作成します。
テストが機能することを確認するためにいくつかのテストを作成し、Tox と Nox を使用して Python バージョン 3.8 から 3.13 でテストします。
楽しそうですよね?
作業しているファイル構造は次のとおりです:
tox-nox-python-test-automation/ ├── tox_nox_python_test_automation/ │ ├── __init__.py │ ├── main.py │ └── calculator.py ├── tests/ │ ├── __init__.py │ └── test_calculator.py ├── pyproject.toml ├── tox.ini ├── noxfile.py ├── README.md
これが私たちの calculator.py です:
def add(a, b): """Returns the sum of two numbers.""" return a + b def subtract(a, b): """Returns the difference of two numbers.""" return a - b
シンプルですよね?このままにしておきます。
コードが機能することを確認します。 test_calculator.py は次のとおりです:
tox-nox-python-test-automation/ ├── tox_nox_python_test_automation/ │ ├── __init__.py │ ├── main.py │ └── calculator.py ├── tests/ │ ├── __init__.py │ └── test_calculator.py ├── pyproject.toml ├── tox.ini ├── noxfile.py ├── README.md
私たちは pytest を使用しています。これは基本的に Python テストの MVP であるテスト ツールです。使用したことがない場合でも、心配する必要はありません。取得するのは非常に簡単です。
それでは、このプロジェクトに取り組んでいる全員が同じ依存関係を使用していることを確認するにはどうすればよいでしょうか?私たちはPoetryを使用します。これは、強化されたrequirements.txtファイルのようなものです。
pyproject.toml は次のようになります:
def add(a, b): """Returns the sum of two numbers.""" return a + b def subtract(a, b): """Returns the difference of two numbers.""" return a - b
すべてをインストールするには、次を実行するだけです:
import pytest from tox_nox_python_test_automation.calculator import add, subtract @pytest.mark.parametrize("a, b, expected", [ (1, 2, 3), (-1, 1, 0), (0, 0, 0), ]) def test_add(a, b, expected): assert add(a, b) == expected @pytest.mark.parametrize("a, b, expected", [ (5, 3, 2), (10, 5, 5), (-1, -1, 0), ]) def test_subtract(a, b, expected): assert subtract(a, b) == expected
次の方法で基本的な単体テストを実行できます:
[tool.poetry] name = "tox_nox_python_tests" version = "0.1.0" description = "Testing with multiple Python versions using Tox and Nox." authors = ["Wallace Espindola <wallace.espindola@gmail.com>"] license = "MIT" [tool.poetry.dependencies] python = "^3.8" pytest = "^8.3" nox = "^2024.10.9" tox = "^4.23.2"
標準の単体テストの実行出力が表示されます。
Tox は自動化がすべてです。 tox.ini は次のとおりです:
poetry install
1 つのコマンドで Tox を実行します:
poetry run pytest --verbose
そしてドーン! Tox は、リストされている Python のすべてのバージョンでコードをテストします。ここで出力例を参照してください:
さらに制御したいですか? Nox を使用するとクリエイティブな作業が可能になります。 noxfile.py は次のとおりです:
[tox] envlist = py38, py39, py310, py311, py312, py313 [testenv] allowlist_externals = poetry commands_pre = poetry install --no-interaction --no-root commands = poetry run pytest
次のコマンドで Nox を実行します:
poetry run tox
これで、ロジックを追加したり、環境をスキップしたり、その他必要なことをすべて柔軟に実行できるようになりました。ここで出力例を参照してください:
なぜローカルテストで終わるのでしょうか? GitHub Actions と GitLab CI/CD で自動的に実行されるようにこれを設定しましょう。
GitHub アクション
これはワークフロー ファイルです .github/workflows/python-tests.yml:
import nox @nox.session(python=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]) def tests(session): session.install("poetry") session.run("poetry", "install", "--no-interaction", "--no-root") session.run("pytest")
GitLab CI/CD
これは .gitlab-ci.yml です:
poetry run nox
やったね! Tox、Nox、Poetry を使用して、複数のバージョンで Python コードをテストする方法がわかりました。
覚えておくべきことは次のとおりです:
このプロジェクトは、テスト自動化に Tox、Nox、Poetry、および Pytest を使用します。詳細なドキュメントについては、以下を参照してください。
有毒文書
Nox ドキュメント
詩のドキュメント
Pytest ドキュメント
完全なコードと例が必要ですか? GitHub のリポジトリをチェックしてください: tox-nox-python-tests.
その他の興味深いテーマや技術的な議論については、私の LinkedIn ページをチェックしてください。
さあ、外に出て、Python プロジェクトを完璧にしましょう! ?
以上がPoetry、Tox、Nox、CI/CD を使用してプロのように Python コードをテストするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。