0Pricing
Python Academy · บทเรียน

การกำหนดพารามิเตอร์และความครอบคลุมการทดสอบ

เรียกใช้การทดสอบด้วยข้อมูลนำเข้าหลายชุดโดยใช้ @pytest.mark.parametrize

การกำหนดพารามิเตอร์และความครอบคลุมการทดสอบ เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

@pytest.mark.parametrize

เรียกใช้การทดสอบเดียวกันกับอินพุตหลายค่าโดยใช้ @pytest.mark.parametrize ทูเพิลแต่ละชุดถือเป็นกรณีทดสอบแยกกัน

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

พารามิเตอร์เดียว

สำหรับอาร์กิวเมนต์เดียว ให้ส่งรายการค่าโดยตรง

import pytest

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

รหัสการทดสอบที่ตั้งชื่อ

ระบุรายการ ids เพื่อตั้งชื่อชุดพารามิเตอร์แต่ละชุด ทำให้เอาต์พุตอ่านได้ชัดเจนยิ่งขึ้น

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

การซ้อนตัวตกแต่ง parametrize

ซ้อนตัวตกแต่ง parametrize สองตัวเพื่อให้ได้ผลคูณคาร์ทีเซียนของอินพุต

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: การติดตั้ง

ติดตั้ง pytest-cov เพื่อวัดว่าโค้ดของคุณมีบรรทัดใดบ้างที่ถูกเรียกใช้โดยการทดสอบ

# pip install pytest-cov

# Basic usage:
# pytest --cov=mypackage

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

การอ่านเอาต์พุตความครอบคลุม

ความครอบคลุมแสดงว่าบรรทัด แขนง หรือคำสั่งใดบ้างที่ไม่ถูกเรียกใช้ระหว่างการทดสอบ

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

ความครอบคลุมของแขนง

ใช้ --cov-branch เพื่อติดตามว่าทั้งสองแขนงของเงื่อนไขได้รับการทดสอบหรือไม่

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

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

ทำให้ล้มเหลวเมื่อความครอบคลุมต่ำ

ใช้ --cov-fail-under=N เพื่อทำให้บิลด์ล้มเหลว หากความครอบคลุมลดลงต่ำกว่า N เปอร์เซ็นต์

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

การกำหนดค่า .coveragerc

กำหนดค่าการยกเว้นจากความครอบคลุมใน .coveragerc เพื่อข้ามโค้ดโครงร่างสำเร็จรูป

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

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

ความหมายของความครอบคลุมที่ดี

ความครอบคลุมสูงไม่ได้รับประกันว่าการทดสอบจะถูกต้อง มุ่งเน้นการตรวจสอบที่มีความหมาย ไม่ใช่เพียงการทำให้บรรทัดถูกเรียกใช้ เป้าหมายที่ใช้ได้จริงสำหรับโครงการส่วนใหญ่คือ 80-90%

# 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

การใช้ parametrize และความครอบคลุมร่วมกัน

การทดสอบแบบกำหนดพารามิเตอร์ช่วยเพิ่มความครอบคลุมได้โดยธรรมชาติ เพราะใช้คำจำกัดความการทดสอบเดียวเพื่อเรียกใช้เส้นทางการทำงานของโค้ดหลายแบบ

import pytest

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

ตรวจสอบอย่างรวดเร็ว

--cov-fail-under=90 ทำอะไรในการเรียกใช้ pytest

สรุปทบทวน

ใช้ @pytest.mark.parametrize เพื่อทดสอบอินพุตหลายค่าอย่างเป็นระเบียบ วัดความครอบคลุมของโค้ดด้วย pytest-cov ติดตามแขนงด้วย --cov-branch และบังคับใช้ค่าขั้นต่ำด้วย --cov-fail-under

คำถามที่พบบ่อย

บทเรียน “การกำหนดพารามิเตอร์และความครอบคลุมการทดสอบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดพารามิเตอร์และความครอบคลุมการทดสอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดพารามิเตอร์และความครอบคลุมการทดสอบ”

เรียกใช้การทดสอบด้วยข้อมูลนำเข้าหลายชุดโดยใช้ @pytest.mark.parametrize คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดพารามิเตอร์และความครอบคลุมการทดสอบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเขียนการทดสอบ pytest แรกของคุณ
  2. ฟิกซ์เจอร์และการตั้งค่า/การรื้อถอน
  3. การกำหนดพารามิเตอร์และความครอบคลุมการทดสอบ
  4. การจำลองด้วย unittest.mock
← กลับไปที่ Python Academy