The Chromium Chronicle #2: ความไม่สม่ำเสมอในการทดสอบการต่อสู้

ตอนที่ 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 ภายนอก เช่น "โฟกัสหายไป" หรือ "หน้าต่างกลายเป็นพื้นหน้า" ลองนึกภาพการใช้งานที่ข้อความแจ้ง จะปรากฏขึ้นเฉพาะเมื่อหน้าต่างเบราว์เซอร์ทำงานอยู่ การดำเนินการดังกล่าว ถูกต้อง แต่การตรวจหากรอบเวลาจริง ทำให้การทดสอบไม่น่าเชื่อถือ

ขั้นตอนหลังการแก้ไข

เมื่อการทดสอบได้รับการแก้ไขแล้ว ให้เรียกใช้ภายในหลายร้อยครั้ง โปรดคอยตรวจสอบ พอร์ทัลความน่าเชื่อถือ