ホームページ >バックエンド開発 >Python チュートリアル >Poetry、Tox、Nox、CI/CD を使用してプロのように Python コードをテストする

Poetry、Tox、Nox、CI/CD を使用してプロのように Python コードをテストする

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-07 07:07:40570ブラウズ

こんにちは!

Python プロジェクトを持っていて、それが世の中のすべてのバージョンの Python で動作することを確認する必要がありますか?信じてください、それは大きな頭痛の種になる可能性があります。でも心配しないでください、私があなたの背中を支えています。このガイドでは、ToxNox、および 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 つの単純な関数を含むミニプロジェクトを作成します。

  • 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

ステップ 1: コードを書く

これが私たちの 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

シンプルですよね?このままにしておきます。


ステップ 2: いくつかのテストを作成する

コードが機能することを確認します。 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 であるテスト ツールです。使用したことがない場合でも、心配する必要はありません。取得するのは非常に簡単です。


ステップ 3: 詩を使用して依存関係を管理する

それでは、このプロジェクトに取り組んでいる全員が同じ依存関係を使用していることを確認するにはどうすればよいでしょうか?私たちは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

ステップ 4: Pytest を使用して単体テストを実行する

次の方法で基本的な単体テストを実行できます:

[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"

標準の単体テストの実行出力が表示されます。


ステップ 5: Tox でテストする

Tox は自動化がすべてです。 tox.ini は次のとおりです:

poetry install

1 つのコマンドで Tox を実行します:

poetry run pytest --verbose

そしてドーン! Tox は、リストされている Python のすべてのバージョンでコードをテストします。ここで出力例を参照してください:

Test Python Code Like a Pro with Poetry, Tox, Nox and CI/CD


ステップ 6: Nox でテストする

さらに制御したいですか? 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

これで、ロジックを追加したり、環境をスキップしたり、その他必要なことをすべて柔軟に実行できるようになりました。ここで出力例を参照してください:

Test Python Code Like a Pro with Poetry, Tox, Nox and CI/CD


ステップ 7: CI/CD を使用して自動化する

なぜローカルテストで終わるのでしょうか? 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 コードをテストする方法がわかりました。

覚えておくべきことは次のとおりです:

  1. Tox は、シンプルな自動テストに最適です。
  2. Nox では自由にカスタマイズできます。
  3. 詩を使用すると、依存関係の管理が簡単になります。
  4. CI/CD により、テストが自動的に実行されます。

もちろん参考文献

このプロジェクトは、テスト自動化に ToxNoxPoetry、および Pytest を使用します。詳細なドキュメントについては、以下を参照してください。

有毒文書
Nox ドキュメント
詩のドキュメント
Pytest ドキュメント


完全なコードと例が必要ですか? GitHub のリポジトリをチェックしてください: tox-nox-python-tests.

その他の興味深いテーマや技術的な議論については、私の LinkedIn ページをチェックしてください。

さあ、外に出て、Python プロジェクトを完璧にしましょう! ?

以上がPoetry、Tox、Nox、CI/CD を使用してプロのように Python コードをテストするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。