Rumah >pembangunan bahagian belakang >Tutorial Python >Uji Kod Python Seperti Pro dengan Puisi, Tox, Nox dan CI/CD

Uji Kod Python Seperti Pro dengan Puisi, Tox, Nox dan CI/CD

Patricia Arquette
Patricia Arquetteasal
2025-01-07 07:07:40596semak imbas

Hei!

Mendapat projek Python dan perlu memastikan ia berfungsi pada setiap versi Python di luar sana? Percayalah, itu boleh menjadi sakit kepala yang BESAR. Tetapi jangan risau, saya ada di belakang anda. Dalam panduan ini, saya akan menunjukkan kepada anda cara menggunakan Tox, Nox dan CI/CD, alatan yang hebat, untuk menguji kod anda merentas berbilang versi Python.

Dan teka apa? Ia lebih mudah daripada yang anda fikirkan.

Apabila anda selesai membaca ini, anda akan menjalankan ujian seperti pakar merentasi Python 3.8 hingga 3.13. Kami akan memastikan perkara mudah, menyeronokkan dan boleh diambil tindakan sepenuhnya. Bunyi bagus? Mari selami.


Mengapa Anda Perlu Mengambil berat tentang Ujian Berbilang Versi?

Gambar ini: Anda menulis beberapa kod Python yang hebat, dan ia berfungsi pada komputer anda. Tetapi kemudian, BAM! Seorang pengguna menghantar e-mel kepada anda, mengatakan ia rosak pada Python 3.9. Anda mencubanya, dan sudah pasti, ada sesuatu yang tidak kena.

Kenapa?

Kerana Python mempunyai semua versi ini, dan setiap versi mempunyai ciri tersendiri. Jika anda tidak menguji kod anda pada berbilang versi, anda benar-benar buta.

Tetapi BERITA BAIKnya ialah, anda tidak perlu memasang sekumpulan versi Python secara manual dan menjalankan ujian pada setiap satu. Di situlah Tox dan Nox masuk seperti wira-wira.


Apakah Tox dan Nox?

Mari kita pecahkan:

  • Tox: Anggap ia sebagai robot yang menguji kod anda dalam persekitaran Python yang berbeza. Ia sangat teratur dan mengikut arahan anda daripada fail tox.ini yang mudah. Anda memberitahu Tox apa yang perlu dilakukan, dan ia melakukannya.

  • Nox: Ia seperti Tox, tetapi lebih sejuk dalam beberapa cara. kenapa? Kerana bukannya fail konfigurasi, anda boleh menulis skrip Python (noxfile.py). Ingin menambah logik atau syarat tersuai? Nox membelakangi anda.

Jadi yang mana lebih baik? Secara jujur, ia bergantung. Jika anda suka perkara yang kemas dan mudah, gunakan Tox. Jika anda jenis kreatif dan sukakan fleksibiliti, Nox ialah kesesakan anda.


Mari Bina Sesuatu yang Hebat

Ini tawarannya:

Kami akan mencipta projek mini dengan dua fungsi mudah:

  • Tambah dua nombor.
  • Tolak satu nombor daripada nombor lain.

Kami akan menulis beberapa ujian untuk memastikan ia berfungsi, dan kemudian kami akan menggunakan Tox dan Nox untuk mengujinya pada versi Python dari 3.8 hingga 3.13.

Seronok bunyinya, kan?

Berikut ialah struktur fail yang sedang kami usahakan:

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

Langkah 1: Tulis Kod

Inilah kalkulator.py kami:

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

Mudah, bukan? Mari kekalkan cara itu.


Langkah 2: Tulis Beberapa Ujian

Masa untuk memastikan kod kami berfungsi. Inilah test_calculator.py kami:

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

Kami menggunakan pytest, alat ujian yang pada asasnya MVP ujian Python. Jika anda tidak pernah menggunakannya, jangan berpeluh, ia sangat mudah untuk diambil.


Langkah 3: Urus Ketergantungan dengan Puisi

Baiklah, jadi bagaimana kami memastikan semua orang yang bekerja pada projek ini menggunakan kebergantungan yang sama? Kami menggunakan Puisi, yang seperti fail supercharged requirements.txt.

Begini rupa pyproject.toml kami:

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

Untuk memasang semuanya, jalankan sahaja:

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

Langkah 4: Jalankan ujian unit dengan Pytest

Anda boleh menjalankan ujian unit asas dengan cara ini:

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

Dan akan melihat ujian unit standard menjalankan output.


Langkah 5: Uji dengan Tox

Tox adalah mengenai automasi. Inilah tox.ini kami:

poetry install

Jalankan Tox dengan satu arahan:

poetry run pytest --verbose

Dan ledakan! Tox akan menguji kod anda merentas setiap versi Python yang disenaraikan. Lihat dan contoh output di sini:

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


Langkah 6: Uji dengan Nox

Mahukan lebih kawalan? Nox membolehkan anda menjadi kreatif. Inilah noxfile.py kami:

[tox]
envlist = py38, py39, py310, py311, py312, py313

[testenv]
allowlist_externals = poetry
commands_pre =
    poetry install --no-interaction --no-root
commands =
    poetry run pytest

Jalankan Nox dengan:

poetry run tox

Kini anda mempunyai fleksibiliti penuh untuk menambah logik, melangkau persekitaran atau melakukan apa sahaja yang anda perlukan. Lihat dan contoh output di sini:

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


Langkah 7: Automatikkan dengan CI/CD

Mengapa berhenti di ujian tempatan? Mari sediakan ini untuk dijalankan secara automatik pada GitHub Actions dan GitLab CI/CD.

Tindakan GitHub

Berikut ialah fail aliran kerja .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

Berikut ialah .gitlab-ci.yml:

poetry run nox

Mari Selesaikan

Anda berjaya! Anda kini tahu cara menguji kod Python merentas berbilang versi menggunakan Tox, Nox dan Puisi.

Inilah perkara yang perlu diingat:

  1. Tox adalah pilihan anda untuk ujian automatik yang mudah.
  2. Nox memberi anda kebebasan untuk menyesuaikan.
  3. Puisi menjadikan pengurusan kebergantungan menjadi mudah.
  4. CI/CD memastikan ujian anda berjalan secara automatik.

Rujukan, sudah tentu

Projek ini menggunakan Tox, Nox, Puisi dan Pytest untuk automasi ujian. Untuk dokumentasi terperinci, sila lihat:

Dokumentasi Tox
Dokumentasi Nox
Dokumentasi Puisi
Dokumentasi Pytest


Perlukan kod penuh dan contoh? Lihat repo di GitHub: tox-nox-python-tests.

Untuk subjek menarik dan perbincangan teknikal lain, semak halaman LinkedIn saya.

Sekarang pergi ke sana dan jadikan projek Python anda kalis peluru! ?

Atas ialah kandungan terperinci Uji Kod Python Seperti Pro dengan Puisi, Tox, Nox dan CI/CD. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn