ตอนที่ 2: โดย Vasilii ในมิวนิก (พฤษภาคม 2019)
ตอนก่อนหน้า
การทดสอบที่ไม่สม่ำเสมอเป็นปัญหาที่พบบ่อยใน Chrome โฆษณาเหล่านี้ ส่งผลต่อประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์รายอื่นๆ และถูกปิดใช้เมื่อเวลาผ่านไป การทดสอบที่ปิดใช้หมายถึงการครอบคลุมการทดสอบลดลง
ขั้นตอนการคัดกรอง
เจ้าของไดเรกทอรีมีหน้าที่แก้ไขการทดสอบที่ไม่น่าเชื่อถือ หากคุณได้รับข้อบกพร่องเกี่ยวกับการทดสอบที่ไม่สม่ำเสมอ ให้ใช้เวลาสองสามนาทีและ แสดงความคิดเห็นว่ามีอะไรผิดพลาดในข้อบกพร่อง หากคุณมีการทดสอบที่ไม่น่าเชื่อถือและ แต่ไม่แน่ใจว่าเกิดข้อผิดพลาดใดขึ้น โปรดลองเปิดใช้การทดสอบอีกครั้ง โปรดส่งข้อบกพร่องใหม่ทันทีหากเป็นปัญหาในคอมโพเนนต์อื่นอย่างชัดเจน เจ้าของคอมโพเนนต์ควรพิจารณาข้อผิดพลาดได้ดีขึ้น
ขั้นตอนการแก้ไขข้อบกพร่อง
แฟล็กบรรทัดคำสั่งจำนวนมากมีประโยชน์สำหรับ
แก้ไขการทดสอบที่ไม่น่าเชื่อถือ เช่น --enable-pixel-output-in-tests
จะแสดงผล UI จริงของเบราว์เซอร์
มีเครื่องมือสำรองหากโปรแกรมแก้ไขข้อบกพร่องทำให้จุดบกพร่องหายไป ตอนนี้
หากเป็นไปได้ ภายใต้โปรแกรมแก้ไขข้อบกพร่อง การทดสอบจะไม่มีปัญหาใดๆ ในกรณีดังกล่าว ให้บันทึก
หรือ base::debug::StackTrace
ก็เป็นประโยชน์
คำนึงถึงสาเหตุที่พบบ่อยที่ทำให้เกิดความล้มเหลว EXPECT__*
รายการนอกเหนือจากข้อบกพร่องในเวอร์ชันที่ใช้งานจริง
รหัส:
- ความคาดหวังไม่ถูกต้อง (เช่น หน้าที่ปลอดภัยหมายถึง HTTPS คุณสามารถโฮสต์ในเครื่องแทน)
- เงื่อนไขการแข่งขันเนื่องจากการทดสอบไม่ได้รอเหตุการณ์ที่เหมาะสม
[อย่าทดสอบการติดตั้งใช้งาน] แต่ให้ทดสอบโดยเน้นที่ลักษณะการทำงาน
// It takes 2 round trips between the UI and the background thread to complete.
SyncWithTheStore();
SyncWithTheStore();
CheckTheStore();
การเดินทางไปกลับ 2 ครั้งอาจเปลี่ยนเป็น 3 ในอนาคต ซึ่งทำให้การทดสอบไม่สม่ำเสมอ อย่างไรก็ตาม มีเพียงสถานะร้านค้าเท่านั้นที่เกี่ยวข้อง แต่ให้ใช้ผู้สังเกตการณ์แทน
โปรดระวังรูปแบบต่อไปนี้
Submit TestPasswordForm(); // Wait until things settle down. RunLoop().RunUntilIdle(); CheckCredentialPromptVisible();
ตัวอย่างข้อมูลดังข้างต้นจากการทดสอบเบราว์เซอร์เกือบไม่ถูกต้องแน่นอน มีเหตุการณ์มากมายที่ควรเกิดขึ้นในกระบวนการต่างๆ และ ชุดข้อความก่อนที่ UI บางรายการจะปรากฏขึ้น
ต่อไปนี้เป็นการแก้ไขที่ถูกต้อง:
SubmitTestPasswordForm(); WaitUntilCredentialPromptVisible();
การแก้ไขข้างต้นถูกต้องตามสมมติฐานที่ว่า
WaitUntilCredentialPromptVisible()
ไม่ได้ตรวจสอบ UI จริงๆ
การทดสอบเบราว์เซอร์ไม่ควรขึ้นอยู่กับเหตุการณ์ UI ภายนอก เช่น "โฟกัสหายไป"
หรือ "หน้าต่างกลายเป็นพื้นหน้า" ลองนึกภาพการใช้งานที่ข้อความแจ้ง
จะปรากฏขึ้นเฉพาะเมื่อหน้าต่างเบราว์เซอร์ทำงานอยู่ การดำเนินการดังกล่าว
ถูกต้อง แต่การตรวจหากรอบเวลาจริง ทำให้การทดสอบไม่น่าเชื่อถือ
ขั้นตอนหลังการแก้ไข
เมื่อการทดสอบได้รับการแก้ไขแล้ว ให้เรียกใช้ภายในหลายร้อยครั้ง โปรดคอยตรวจสอบ พอร์ทัลความน่าเชื่อถือ