Parameterisasi dan Cakupan Test
Jalankan test dengan berbagai input menggunakan @pytest.mark.parametrize.
Parameterisasi dan Cakupan Test adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
@pytest.mark.parametrize
Jalankan pengujian yang sama dengan beberapa masukan menggunakan @pytest.mark.parametrize. Setiap tuple merupakan kasus pengujian terpisah.
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 == expectedParameter Tunggal
Untuk satu argumen, teruskan daftar nilai secara langsung.
import pytest
@pytest.mark.parametrize("n", [1, 2, 3, 4, 5])
def test_positive(n):
assert n > 0ID Pengujian Bernama
Berikan daftar ids untuk memberi label pada setiap kumpulan parameter agar keluaran 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) == resultMenumpuk Dekorator parametrize
Susun dua dekorator parametrize untuk mendapatkan hasil kali Kartesius dari masukan.
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: Instalasi
Instal pytest-cov untuk mengukur baris kode mana yang dijalankan oleh pengujian.
# pip install pytest-cov
# Basic usage:
# pytest --cov=mypackage
# HTML report:
# pytest --cov=mypackage --cov-report=htmlMembaca Keluaran Cakupan
Cakupan menunjukkan baris, cabang, atau pernyataan mana yang tidak tercapai selama pengujian.
# Name Stmts Miss Cover
# ------- ----- ---- -----
# mypackage/utils.py 20 3 85%
#
# Missing: lines 45, 67, 88Cakupan Cabang
Gunakan --cov-branch untuk melacak apakah kedua cabang kondisional telah diuji.
# pytest --cov=mypackage --cov-branch
def is_positive(n):
if n > 0: # branch 1: True
return True
return False # branch 2: FalseGagal jika Cakupan Rendah
Gunakan --cov-fail-under=N untuk menggagalkan build jika cakupan turun di bawah N persen.
# pytest --cov=mypackage --cov-fail-under=80
# FAIL Required test coverage of 80% not reached. Total: 72%Konfigurasi .coveragerc
Konfigurasikan pengecualian cakupan di .coveragerc untuk melewati kode boilerplate.
# .coveragerc
[run]
omit =
*/migrations/*
*/tests/*
setup.py
[report]
exclude_lines =
pragma: no cover
if TYPE_CHECKING:Makna Cakupan yang Baik
Cakupan tinggi tidak menjamin pengujian yang benar. Fokuslah pada assertion yang bermakna, bukan sekadar mencapai baris kode. 80–90% merupakan target praktis untuk sebagian besar proyek.
# 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 FalseMenggabungkan parametrize dan Cakupan
Pengujian berparameter secara alami meningkatkan cakupan dengan menjalankan beberapa jalur kode menggunakan satu definisi pengujian.
import pytest
@pytest.mark.parametrize("n,expected", [
(5, True), (-1, False), (0, False)
])
def test_is_positive(n, expected):
assert is_positive(n) == expectedPemeriksaan Singkat
Apa yang dilakukan --cov-fail-under=90 dalam proses pytest?
Ringkasan
Gunakan @pytest.mark.parametrize untuk menguji beberapa masukan dengan rapi. Ukur cakupan kode dengan pytest-cov, lacak cabang dengan --cov-branch, dan tegakkan batas minimum dengan --cov-fail-under.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Parameterisasi dan Cakupan Test” gratis?
Ya — teks lengkap “Parameterisasi dan Cakupan Test” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Parameterisasi dan Cakupan Test”?
Jalankan test dengan berbagai input menggunakan @pytest.mark.parametrize. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Parameterisasi dan Cakupan Test” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menulis Test pytest Pertama Anda
- Fixture dan Penyiapan/Pembongkaran
- Parameterisasi dan Cakupan Test
- Mocking dengan unittest.mock