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

การเขียนการทดสอบ pytest แรกของคุณ

ทำความเข้าใจการค้นหาการทดสอบ คำสั่ง assert และโครงสร้างการทดสอบ

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

การติดตั้ง pytest

ติดตั้ง pytest ด้วย pip โดยไม่ต้องกำหนดค่าที่จำเป็น — pytest จะค้นพบการทดสอบโดยอัตโนมัติ

# pip install pytest

# Run all tests
# pytest

# Run a specific file
# pytest test_math.py

ฟังก์ชันการทดสอบแบบง่าย

pytest จะรวบรวมฟังก์ชันใด ๆ ที่ขึ้นต้นด้วย test_ ใช้คำสั่ง assert แบบปกติ — pytest จะปรับรูปแบบคำสั่งเหล่านี้ใหม่เพื่อแสดงเอาต์พุตโดยละเอียด

# test_math.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5

def test_add_negative():
    assert add(-1, 1) == 0

ไฟล์การทดสอบและการค้นพบ

pytest จะค้นพบไฟล์การทดสอบที่ชื่อ test_*.py หรือ *_test.py และรวบรวมฟังก์ชันที่ชื่อ test_* หรือคลาสที่ชื่อ Test*

tests/
    test_utils.py
    test_models.py
    conftest.py   # shared fixtures

การจัดกลุ่มการทดสอบในคลาส

จัดกลุ่มการทดสอบที่เกี่ยวข้องไว้ในคลาสที่ขึ้นต้นด้วย Test ไม่จำเป็นต้องใช้ unittest.TestCase

class TestCalculator:
    def test_add(self):
        assert 1 + 1 == 2

    def test_multiply(self):
        assert 3 * 4 == 12

การทดสอบข้อยกเว้น

ใช้ pytest.raises เป็นตัวจัดการบริบทเพื่อยืนยันว่ามีการส่งข้อยกเว้นที่ระบุไว้

import pytest

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("cannot divide by zero")
    return a / b

def test_divide_by_zero():
    with pytest.raises(ZeroDivisionError, match="cannot divide"):
        divide(10, 0)

แฟล็ก -v

เรียกใช้ pytest ด้วย -v (แบบละเอียด) เพื่อดูชื่อการทดสอบแต่ละรายการและสถานะผ่านหรือไม่ผ่าน

# pytest -v
# test_math.py::test_add PASSED
# test_math.py::test_add_negative PASSED

# Show print output too:
# pytest -v -s

การข้ามการทดสอบ

ใช้ @pytest.mark.skip หรือ @pytest.mark.skipif เพื่อข้ามการทดสอบตามเงื่อนไข

import pytest, sys

@pytest.mark.skip(reason="not implemented yet")
def test_future_feature():
    assert False

@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_only():
    assert True

การทำเครื่องหมายการทดสอบที่คาดว่าจะไม่ผ่าน

@pytest.mark.xfail ทำเครื่องหมายการทดสอบที่คุณคาดว่าจะไม่ผ่าน การทดสอบจะถือว่าผ่านหากไม่ผ่าน และจะแจ้งเตือนหากผ่านโดยไม่คาดคิด

import pytest

@pytest.mark.xfail(reason="known bug #42")
def test_buggy():
    assert 1 == 2  # will fail, but that's expected

การเขียน assert ใหม่

pytest จะปรับคำสั่ง assert ใหม่เพื่อแสดงค่าที่ทำให้เกิดความล้มเหลว ซึ่งมีประโยชน์มากกว่า AssertionError เปล่า ๆ

def test_list_equal():
    result = [1, 2, 4]
    expected = [1, 2, 3]
    assert result == expected
# AssertionError:
#   assert [1, 2, 4] == [1, 2, 3]
#   At index 2 diff: 4 != 3

conftest.py

pytest จะโหลด conftest.py โดยอัตโนมัติ ใส่ฟิกซ์เจอร์และปลั๊กอินที่ใช้ร่วมกันไว้ที่นี่โดยไม่ต้องนำเข้าอย่างชัดเจน

# conftest.py
import pytest

@pytest.fixture
def sample_data():
    return {"key": "value"}

# Any test file in the same dir can use sample_data as a parameter

การเรียกใช้การทดสอบบางส่วน

ใช้ -k เพื่อเรียกใช้การทดสอบที่ตรงกับนิพจน์คีย์เวิร์ด

# Run tests containing "add"
# pytest -k "add"

# Run tests NOT containing "slow"
# pytest -k "not slow"

# Run a specific test
# pytest test_math.py::test_add

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

ชื่อฟังก์ชันการทดสอบของ pytest ต้องขึ้นต้นด้วยคำนำหน้าใดจึงจะถูกค้นพบโดยอัตโนมัติ

สรุปทบทวน

pytest ไม่ต้องใช้โค้ดประกอบที่ซ้ำซ้อน: ตั้งชื่อไฟล์เป็น test_*.py ตั้งชื่อฟังก์ชันเป็น test_* และใช้ assert แบบปกติ ใช้ pytest.raises สำหรับข้อยกเว้น ใช้ -v เพื่อแสดงรายละเอียด และใช้ conftest.py สำหรับฟิกซ์เจอร์ที่ใช้ร่วมกัน

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

บทเรียน “การเขียนการทดสอบ pytest แรกของคุณ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การเขียนการทดสอบ pytest แรกของคุณ”

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

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

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

บทเรียน “การเขียนการทดสอบ pytest แรกของคุณ” ใช้เวลานานแค่ไหน

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

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

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

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

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