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

こんにちは!

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>"]
license = "MIT"

[tool.poetry.dependencies]
python = "^3.8"
pytest = "^8.3"
nox = "^2024.10.9"
tox = "^4.23.2"
</wallace.espindola>

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


ステップ 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 までご連絡ください。
リストと配列の選択は、大規模なデータセットを扱うPythonアプリケーションの全体的なパフォーマンスにどのように影響しますか?リストと配列の選択は、大規模なデータセットを扱うPythonアプリケーションの全体的なパフォーマンスにどのように影響しますか?May 03, 2025 am 12:11 AM

forhandlinglaredataSetsinpython、usenumpyArrays forbetterperformance.1)numpyarraysarememory-effictientandfasterfornumericaloperations.2)nusinnnnedarytypeconversions.3)レバレッジベクトル化は、測定済みのマネージメーシェイメージーウェイズデイタイです

Pythonのリストと配列にメモリがどのように割り当てられるかを説明します。Pythonのリストと配列にメモリがどのように割り当てられるかを説明します。May 03, 2025 am 12:10 AM

inpython、listsusedynamicmemoryallocation with allocation、whilenumpyArraysalocatefixedmemory.1)listsallocatemorememorythanneededededinitivative.2)numpyArrayasallocateexactmemoryforements、rededicablebutlessflexibilityを提供します。

Pythonアレイ内の要素のデータ型をどのように指定しますか?Pythonアレイ内の要素のデータ型をどのように指定しますか?May 03, 2025 am 12:06 AM

inpython、youcanspecthedatatypeyfelemeremodelernspant.1)usenpynernrump.1)usenpynerp.dloatp.ploatm64、フォーマーpreciscontrolatatypes。

Numpyとは何ですか、そしてなぜPythonの数値コンピューティングにとって重要なのですか?Numpyとは何ですか、そしてなぜPythonの数値コンピューティングにとって重要なのですか?May 03, 2025 am 12:03 AM

numpyisessentialfornumericalcomputinginpythonduetoitsspeed、memory efficiency、andcomprehensivematicalfunctions.1)それは、performsoperations.2)numpyArraysaremoremory-efficientthanpythonlists.3)Itofderangeofmathematicaloperty

「隣接するメモリ割り当て」の概念と、配列にとってその重要性について説明します。「隣接するメモリ割り当て」の概念と、配列にとってその重要性について説明します。May 03, 2025 am 12:01 AM

contiguousMemoryAllocationisucial forArraysは、ForeffienceAndfastelementAccess.1)iteenablesConstantTimeAccess、O(1)、DuetodirectAddresscalculation.2)itemprovesefficiencyByAllowingMultiblementFechesperCacheLine.3)itimplifieMememm

Pythonリストをどのようにスライスしますか?Pythonリストをどのようにスライスしますか?May 02, 2025 am 12:14 AM

slicingapythonlistisdoneusingtheyntaxlist [start:stop:step] .hore'showitworks:1)startisthe indexofthefirstelementtoinclude.2)spotisthe indexofthefirmenttoeexclude.3)staptistheincrementbetbetinelements

Numpyアレイで実行できる一般的な操作は何ですか?Numpyアレイで実行できる一般的な操作は何ですか?May 02, 2025 am 12:09 AM

numpyallows forvariousoperationsonarrays:1)basicarithmeticlikeaddition、減算、乗算、および分割; 2)AdvancedperationssuchasmatrixMultiplication;

Pythonを使用したデータ分析では、配列はどのように使用されていますか?Pythonを使用したデータ分析では、配列はどのように使用されていますか?May 02, 2025 am 12:09 AM

Arraysinpython、特にnumpyandpandas、aresentialfordataanalysis、offeringspeedandeficiency.1)numpyarraysenable numpyarraysenable handling forlaredatasents andcomplexoperationslikemoverages.2)Pandasextendsnumpy'scapabivitieswithdataframesfortruc

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター