เริ่มต้นกับ pytest
เขียนและรันเทสต์อัตโนมัติด้วย pytest — เครื่องมือเทสต์ที่นิยมที่สุดใน Python
pytest คือ framework เทสต์ที่ใช้กันมากที่สุดใน Python จุดเด่นคือเขียนง่าย ใช้ assert ธรรมดา ไม่ต้องจำ method แปลก ๆ หัวข้อนี้พาเขียนเทสต์แรกและรันให้เป็น
ติดตั้งและกฎการตั้งชื่อ
pip install pytestpytest หาเทสต์อัตโนมัติจากชื่อ: ไฟล์ขึ้นต้น test_ หรือลงท้าย _test และฟังก์ชันขึ้นต้น test_
# ไฟล์ mathutils.py
def add(a, b):
return a + b
def divide(a, b):
return a / b# ไฟล์ test_mathutils.py
from mathutils import add, divide
def test_add():
assert add(2, 3) == 5
def test_add_negative():
assert add(-1, -1) == -2
def test_divide():
assert divide(10, 2) == 5.0รันเทสต์
pytest # รันทุกเทสต์ในโปรเจกต์
pytest test_mathutils.py # รันไฟล์เดียว
pytest -v # แสดงรายละเอียดแต่ละเทสต์
pytest -k add # รันเฉพาะเทสต์ที่ชื่อมี 'add'test_mathutils.py ... [100%]
3 passed in 0.01s
# ถ้าพัง pytest บอกชัดว่าเคสไหน บรรทัดไหน ค่าที่ได้ vs ที่คาด
# assert add(2, 3) == 6
# E assert 5 == 6ต่างจาก framework อื่น (เช่น unittest ที่ต้องใช้ self.assertEqual) pytest ใช้ assert ของ Python ตรง ๆ แล้วมันฉลาดพอจะบอกค่าที่ได้กับค่าที่คาดให้เห็นเมื่อพัง — เขียนง่าย อ่านง่าย
จัดโครงสร้างเทสต์
นิยมแยกเทสต์ไว้โฟลเดอร์ tests/ (จากบทโครงสร้างโปรเจกต์) แต่ละไฟล์ test_ ทดสอบ module ที่คู่กัน
my-project/
├── src/myapp/mathutils.py
└── tests/test_mathutils.pyสรุปหัวข้อนี้
- pip install pytest; ตั้งชื่อไฟล์ test_*.py ฟังก์ชัน test_*
- ใช้ assert ธรรมดา — pytest บอกค่าที่ได้ vs คาดเมื่อพัง
- รันด้วย pytest, -v ละเอียด, -k กรองชื่อ
- แยกเทสต์ไว้ tests/ ทดสอบแต่ละ module
1) เขียนฟังก์ชัน + ไฟล์ test_ แล้วรัน pytest ให้ผ่าน 2) เขียนเทสต์ 3 เคส: ปกติ / ขอบ (เช่น 0) / กรณีพิเศษ 3) จงใจทำเทสต์พังแล้วอ่านข้อความ pytest 4) ลอง pytest -v และ -k