0Pricing
Python Academy · Pelajaran

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 == expected

Parameter 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 > 0

ID 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) == result

Menumpuk 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=html

Membaca 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, 88

Cakupan 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: False

Gagal 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 False

Menggabungkan 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) == expected

Pemeriksaan 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

  1. Menulis Test pytest Pertama Anda
  2. Fixture dan Penyiapan/Pembongkaran
  3. Parameterisasi dan Cakupan Test
  4. Mocking dengan unittest.mock
← Kembali ke Python Academy