首頁 >後端開發 >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 的每個版本?相信我,這可能會讓人非常頭痛。但別擔心,我會支持你的。在本指南中,我將向您展示如何使用ToxNoxCI/CD 這些很棒的工具來在多個Python 版本中測試您的代碼。

你猜怎麼著?這比你想像的還要容易。

當您讀完本文時,您將像專業人士一樣在 Python 3.8 到 3.13 上執行測試。我們會讓事情變得簡單、有趣且完全可行。聽起來不錯嗎?讓我們深入了解一下。


為什麼你應該關心多版本測試?

想像一下:您編寫了一些很酷的 Python 程式碼,它可以在您的電腦上運行。但隨後,嘭!一位用戶給您發電子郵件,說它在 Python 3.9 上崩潰了。你試了一下,果然出了問題。

為什麼?

因為Python有所有這些版本,並且每個版本都有其怪癖。如果你不在多個版本上測試你的程式碼,那麼你就是盲目的。

但好消息是,您不必手動安裝一堆 Python 版本並對每個版本執行測試。這就是 Tox 和 Nox 像超級英雄一樣突然出現的地方。


什麼是Tox和Nox?

讓我們來分解一下:

  • Tox:將其視為在不同 Python 環境中測試程式碼的機器人。它組織得非常好,並遵循簡單的 tox.ini 檔案中的指示。你告訴 Tox 要做什麼,它就會這麼做。

  • Nox:它就像 Tox,但在某些方面更酷。為什麼?因為您不需要編寫設定文件,而是編寫 Python 腳本 (noxfile.py)。想要新增自訂邏輯或條件? Nox 為您提供支援。

那麼哪個比較好呢?老實說,這取決於。如果您喜歡簡潔明了的事物,請選擇 Tox。如果您是創意人士並且喜歡靈活性,Nox 就是您的選擇。


讓我們建立一些很酷的東西

這是交易:

我們將建立一個具有兩個簡單功能的迷你專案:

  • 增加兩個數字。
  • 用一個數字減去另一個數字。

我們將編寫一些測試來確保它們工作,然後我們將使用 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。如果您從未使用過它,請不要擔心,它非常容易上手。


第三步:用 Poetry 管理依賴關係

好的,那麼我們如何確保參與專案的每個人都使用相同的依賴項?我們使用 Poetry,它就像一個增壓的 requests.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

使用一個指令執行 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. Poetry 讓管理依賴關係變得輕而易舉。
  4. CI/CD 確保您的測試自動運行。

當然是參考資料

此項目使用 ToxNoxPoetryPytest 進行測試自動化。詳細文件請查看:

毒性文件
Nox 文件
詩歌文獻
Pytest 文件


需要完整的程式碼和範例嗎?查看 GitHub 上的儲存庫:tox-nox-python-tests。

有關其他有趣的主題和技術討論,請查看我的 LinkedIn 頁面。

現在就出去讓你的 Python 專案防彈吧! ?

以上是像專業人士一樣使用 Poetry、Tox、Nox 和 CI/CD 測試 Python 程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn