การเขียนการทดสอบ 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 != 3conftest.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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเขียนการทดสอบ pytest แรกของคุณ
- ฟิกซ์เจอร์และการตั้งค่า/การรื้อถอน
- การกำหนดพารามิเตอร์และความครอบคลุมการทดสอบ
- การจำลองด้วย unittest.mock