วันเสาร์ที่ 17 มีนาคม พ.ศ. 2561

Test-Driven Development with Python(Chapter 6)

เนื่องจากเดิมอันเดิมยาวและติดกันเกินไปทำให้ยากต่อการอ่าน
จึงแยก (Week 3-2) - (Week 5-1) Test-Driven Development with Python ออกเป็น 7 part

Chapter 6


เพื่อเปลี่ยนไปใช้ LiveServerTestCase เพื่อจะผ่าน manage.py ของ django
- สร้าง folder functional_tests
- สร้างไฟล์ __init__.py เพื่อให้ django สามารถเข้าไปจัดการได้
- ย้ายไฟล์ functional_tests.py ไปข้างใน folder ที่สร้างขึ้นแล้วเปลี่ยนชื่อเป็น tests.py
- แล้วจึงทำการเช็คสถานะ vcs ของเรา (git)
- ทำการแก้ใน functional test file ของเราให้ใช้ LiveServerTestCase แทน NewVisitorTest
- แก้จาก localhost port 8000 เป็น live_server_url ของ LiveServerTestCase
ตอนนี้ test ของเราเปลี่ยนไปตามรูปด้านล่าง
ทดสอบ test ทั้งหมด
ทดสอบ functional test
ทดสอบ unit test
การรอต่างดังรูปด้านล่าง เค้าบอกว่าที่เราทำมาเป็นรอแบบ voodoo พึ่งศัยศาสตร์ ทำให้อาจเสียเวลาถ้าเรากำหนดเวลารอไม่ใกล้เคียงกับเวลาโหลด หรืออาจ error ถ้าโหลดช้ากว่าเวลารอ

#slide-wait
จึงทำการแก้ implicit wait (timesleep) ทั้งหมด
แก้เป็นใช้ฟังก์ชันเสริมที่สร้างขึ้นมาใหม่ซึ่งรวมกับฟังก์ชันหาภายในตารางไปด้วยในตัว
#1 - สร้างตัวแปร MAX_WAIT ว่ารอสูงสุด 10 วินาที
#2 - ตั้งตัวแปร start_time เท่ากับเวลาขณะนั้นแล้วเข้าลูปทันที
#3 - จากฟังก์ชัน assert หาคำในตารางอันเดิม
#4 - ถ้าเจอตารางแล้วกลับเข้าฟังก์ชันหลักทันที
#5 - ถ้าไม่เจอ error จาก assert รอ 0.5 วินาทีเรื่อยๆ และ จะทำ #6
#6 - ถ้าเวลา start_time - เวลาปัจจุบัน > ตัวแปร MAX_WAIT จะโชว์ error จาก #slide-wait ข้างต้น
แล้วจึงเปลี่ยนฟังก์ชันหาในตารางทั้งหมดมาใช้อันใหม่ wait_for_row_in_list_table()
ลองเทียบเวลา test ทั้งหมดในอันใหม่ กับ functional test แค่อย่างเดียวในอันเก่าไวกว่าประมาณ 0.5 วินาที
ต่อมาลองจงใจ error โดยการ assert คำว่า 'foo' เวลาจะนานเพิ่มขึ้นอย่างที่เรากำหนดหรือไม่ ประกฏว่านานขึ้น
ลองใส่ id ผิดบ้าง ประกฏว่านานขึ้น

ไม่มีความคิดเห็น:

แสดงความคิดเห็น