cari
Rumahpembangunan bahagian belakangTutorial PythonUji Kod Python Seperti Pro dengan Puisi, Tox, Nox dan CI/CD

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

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

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
Bagaimana anda memotong senarai python?Bagaimana anda memotong senarai python?May 02, 2025 am 12:14 AM

Slicingapythonlistisdoneusingthesyntaxlist [Mula: berhenti: langkah] .here'showitworks: 1) startistheindexofthefirstelementtoinclude.2) stopistheindexofthefirstelementToexclude.3)

Apakah beberapa operasi biasa yang boleh dilakukan pada array numpy?Apakah beberapa operasi biasa yang boleh dilakukan pada array numpy?May 02, 2025 am 12:09 AM

NumpyallowsforvariousoperationsonArrays: 1) BasicarithmeticLikeaddition, penolakan, pendaraban, danDivision; 2) Pengerjaan AdvancedSuchasmatrixmultiplication; 3) Element-WiseOperationswithoutExplicitLoops;

Bagaimana tatasusunan digunakan dalam analisis data dengan python?Bagaimana tatasusunan digunakan dalam analisis data dengan python?May 02, 2025 am 12:09 AM

Arraysinpython, terutamanya yang ada, adalah, penawaran yang ditawarkan.1) numpyarraysenableFandlingoflargedataSetsandClexPleperationsLikemovingAverages.2)

Bagaimanakah jejak memori senarai dibandingkan dengan jejak memori array di Python?Bagaimanakah jejak memori senarai dibandingkan dengan jejak memori array di Python?May 02, 2025 am 12:08 AM

ListsSandnumpyAraySInpythonHavedifferMememoryFootPrints: listsaremoreflexibleButlessMememory-cekap, pemanmak

Bagaimana anda mengendalikan konfigurasi khusus persekitaran semasa menggunakan skrip python yang boleh dilaksanakan?Bagaimana anda mengendalikan konfigurasi khusus persekitaran semasa menggunakan skrip python yang boleh dilaksanakan?May 02, 2025 am 12:07 AM

ToensurePythonscriptsbehaveCorrectlyCrossdevelopment, pementasan, dan produksi, usetheseStregies: 1) Environmentvariablesforsimplesettings, 2) ConfigurationFilesfilePlexSetups, dan3) Dynamicloadingforadaptability.EachMethodeFerPiReFiteReFiteShitsandReFitSandRiteFitSandRiteFitSandRiteFiteSandRiteReFitSandRiteReFitSandRiteFiteShiteSandReFiteShitsandReShitsAnfitsEts,

Bagaimana anda memotong array python?Bagaimana anda memotong array python?May 01, 2025 am 12:18 AM

Sintaks asas untuk pengirim senarai python adalah senarai [Mula: Berhenti: Langkah]. 1. Start adalah indeks elemen pertama yang disertakan, 2.Stop adalah indeks elemen pertama yang dikecualikan, dan 3. Step menentukan saiz langkah antara elemen. Hirisan tidak hanya digunakan untuk mengekstrak data, tetapi juga untuk mengubah suai dan membalikkan senarai.

Di bawah keadaan apa yang mungkin senarai lebih baik daripada tatasusunan?Di bawah keadaan apa yang mungkin senarai lebih baik daripada tatasusunan?May 01, 2025 am 12:06 AM

ListsOutPerFormAraySin: 1) DynamicsizingandFrequentInsertions/Deletions, 2) StoringHeterogeneousData, dan3) MemoryeficiencyForSparsedata, ButmayHaveslightPerformancecostSincertaor.

Bagaimana anda boleh menukar array python ke senarai python?Bagaimana anda boleh menukar array python ke senarai python?May 01, 2025 am 12:05 AM

ToConvertapythonarraytoalist, usethelist () constructororageneratorexpression.1) importTheArrayModuleAndCreateeanArray.2) uselist (arr) atau [xforxinarr] toConvertittoalist, urusanPengerasiPormanceAndMemoryeficiencyForlargedatasets.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini