Python Academy · Pelajaran

Parameter dan Liputan Ujian

Jalankan ujian dengan pelbagai input menggunakan @pytest.mark.parametrize.

Pelajaran 3 daripada 413 langkah

Parameter dan Liputan Ujian ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Python Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Python Academy merangkumi sejumlah 4 pelajaran.

@pytest.mark.parametrize

Jalankan ujian yang sama dengan berbilang input menggunakan @pytest.mark.parametrize. Setiap tuple ialah kes ujian yang berasingan.

import pytest

@pytest.mark.parametrize("a,b,expected", [
    (1, 2, 3),
    (0, 0, 0),
    (-1, 1, 0),
    (10, -5, 5),
])
def test_add(a, b, expected):
    assert a + b == expected

Parameter Tunggal

Untuk satu argumen, hantar senarai nilai secara terus.

import pytest

@pytest.mark.parametrize("n", [1, 2, 3, 4, 5])
def test_positive(n):
    assert n > 0

ID Ujian Bernama

Sediakan senarai ids untuk melabelkan setiap set parameter supaya hasilnya lebih jelas.

import pytest

@pytest.mark.parametrize("value,result", [
    (2, True),
    (3, False),
], ids=["even", "odd"])
def test_is_even(value, result):
    assert (value % 2 == 0) == result

Menyusun Penghias parametrize

Susun dua penghias parametrize untuk mendapatkan hasil darab Cartesian bagi input.

import pytest

@pytest.mark.parametrize("x", [1, 2])
@pytest.mark.parametrize("y", [10, 20])
def test_product(x, y):
    assert x * y > 0   # 4 test cases: (1,10),(1,20),(2,10),(2,20)

pytest-cov: Pemasangan

Pasang pytest-cov untuk mengukur baris kod anda yang dilaksanakan oleh ujian.

# pip install pytest-cov

# Basic usage:
# pytest --cov=mypackage

# HTML report:
# pytest --cov=mypackage --cov-report=html

Membaca Hasil Liputan

Liputan menunjukkan baris, cabang atau pernyataan yang tidak dicapai semasa ujian.

# Name          Stmts   Miss  Cover
# -------       -----   ----  -----
# mypackage/utils.py  20       3    85%
#
# Missing: lines 45, 67, 88

Liputan Cabang

Gunakan --cov-branch untuk menjejak sama ada kedua-dua cabang syarat diuji.

# pytest --cov=mypackage --cov-branch

def is_positive(n):
    if n > 0:        # branch 1: True
        return True
    return False     # branch 2: False

Gagal apabila Liputan Rendah

Gunakan --cov-fail-under=N untuk menggagalkan binaan jika liputan jatuh di bawah N peratus.

# pytest --cov=mypackage --cov-fail-under=80
# FAIL Required test coverage of 80% not reached. Total: 72%

Konfigurasi .coveragerc

Konfigurasikan pengecualian liputan dalam .coveragerc untuk melangkau kod rangka asas.

# .coveragerc
[run]
omit =
    */migrations/*
    */tests/*
    setup.py

[report]
exclude_lines =
    pragma: no cover
    if TYPE_CHECKING:

Maksud Liputan yang Baik

Liputan tinggi tidak menjamin ujian yang betul. Sasarkan pengesahan yang bermakna, bukan sekadar meliputi baris. 80-90% ialah sasaran praktikal untuk kebanyakan projek.

# A covered but useless test:
def test_nothing():
    is_positive(5)   # no assert — 100% coverage, zero confidence

# A meaningful test:
def test_positive():
    assert is_positive(5) is True
    assert is_positive(-1) is False

Menggabungkan parametrize dan Liputan

Ujian berparameter meningkatkan liputan secara semula jadi dengan melaksanakan berbilang laluan kod menggunakan satu takrifan ujian.

import pytest

@pytest.mark.parametrize("n,expected", [
    (5, True), (-1, False), (0, False)
])
def test_is_positive(n, expected):
    assert is_positive(n) == expected

Semakan Pantas

Apakah tindakan --cov-fail-under=90 dalam pelaksanaan pytest?

Imbas Kembali

Gunakan @pytest.mark.parametrize untuk menguji berbilang input dengan kemas. Ukur liputan kod dengan pytest-cov, jejak cabang dengan --cov-branch dan kuatkuasakan nilai minimum dengan --cov-fail-under.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
76
Pelajaran
320

Soalan Lazim

Adakah pelajaran “Parameter dan Liputan Ujian” percuma?

Ya — teks penuh “Parameter dan Liputan Ujian” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Python Academy, tingkat taraf kepada CoddyKit PRO. Kursus Python Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Parameter dan Liputan Ujian”?

Jalankan ujian dengan pelbagai input menggunakan @pytest.mark.parametrize. Anda berlatih Python Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Python Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Python Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Parameter dan Liputan Ujian” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menulis Ujian pytest Pertama Anda
  2. Fixture dan Persediaan/Pembersihan
  3. Parameter dan Liputan Ujian
  4. Mock dengan unittest.mock
← Kembali ke Python Academy