Chromium Chronicle #17: มิกซ์ทดสอบเบราว์เซอร์

ตอนที่ 17: โดย Toby Huang ในซานฟรานซิสโก แคลิฟอร์เนีย (มกราคม 2021)
ตอนก่อนหน้า

การทดสอบเบราว์เซอร์เป็นรูปแบบการทดสอบอัตโนมัติสำหรับโค้ดโครเมียมที่เป็นแบบต้นทางถึงปลายทางมากกว่าการทดสอบหน่วย การทดสอบเบราว์เซอร์จะสร้างอินสแตนซ์เบราว์เซอร์และทดสอบองค์ประกอบ UI หลายอย่างแทนการทดสอบฟังก์ชันอินพุต/เอาต์พุตเพียงอย่างเดียวอย่างเช่นการทดสอบหน่วย การทดสอบอัตโนมัติที่ผสานรวมมีความสำคัญต่อการจำลองประสบการณ์ของผู้ใช้ตั้งแต่ต้นทางถึงปลายทาง เมื่อเขียนการทดสอบเบราว์เซอร์ คุณมักต้องการตั้งค่าแบบเป็นโปรแกรมที่ผู้ใช้ทำด้วยตนเองได้ mixins คือชุดเครื่องมือสำหรับดำเนินการตั้งค่าการทดสอบเบราว์เซอร์ที่ไม่สำคัญในรูปแบบที่นำมาใช้ใหม่ได้

ตัวอย่างมิกซ์ซินที่มีประโยชน์

  • GuestUserMixin สำหรับการทดสอบโหมดไม่ระบุตัวตน
  • UserPolicyMixin สำหรับการล้อเลียนนโยบายผู้ใช้จากเซิร์ฟเวอร์
  • FakeGaiaMixin สำหรับการตอบล้อเลียนจากเซิร์ฟเวอร์ Gaia

คุณสามารถสร้างมิกซ์ที่กำหนดเองของคุณเอง เพื่อใช้ตอบสนองวัตถุประสงค์ที่หลากหลาย

ข้อมูลโค้ดด้านล่างเข้าสู่ระบบในฐานะผู้ใช้ชั่วคราวสำหรับการทดสอบ คุณต้องตรวจสอบว่าฟีเจอร์ทำงานในโหมดไม่ระบุตัวตน

ควรทำ
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest {
 private:
  GuestSessionMixin guest_session_mixin_{&mixin_host_};
};

LoggedInUserMixin เป็นวิธีที่สะดวกสำหรับการลงชื่อเข้าสู่ระบบในฐานะผู้ใช้ Family Link สำหรับการทดสอบ หากฟีเจอร์ส่งผลกระทบต่อทุกอย่างที่เกี่ยวข้องกับการควบคุมดูแลเด็ก คุณควรทดสอบฟีเจอร์สำหรับผู้ใช้ภายใต้การควบคุมดูแล ข้อบกพร่องที่อาจเป็นไปได้คือ การลืมว่าผู้ใช้ที่เป็นเด็กปิดใช้โหมดไม่ระบุตัวตนหรือติดตั้งส่วนขยายไม่ได้หากไม่ได้รับการอนุมัติจากผู้ปกครอง LoggedInUserMixin คือสารประกอบผสมที่ประกอบขึ้นจากมิกซ์ซินอื่นๆ

ควรทำ
class MyChildBrowserTestClass : public MixinBasedInProcessBrowserTest {
 protected:
  void SetUpOnMainThread() override {
    MixinBasedInProcessBrowserTest::SetUpOnMainThread();
    logged_in_user_mixin_.LogInUser();
  }

 private:
  LoggedInUserMixin logged_in_user_mixin_{&mixin_host_,
                                          LoggedInUserMixin::LogInType::kChild,
                                          embedded_test_server(), this};
};

ประโยชน์หลักอย่างหนึ่งของมิกซ์อินคือการใช้การจัดองค์ประกอบแทนการสืบทอดและหลีกเลี่ยงปัญหาเกี่ยวกับการสืบทอดเพชรหลายรายการ การรับค่าจากคลาสฐานทดสอบมากกว่า 1 คลาสจะนำไปสู่ปัญหาระดับไดมอนด์ แต่คุณจะผสมผสานมิกซ์และจับคู่ในขณะที่หลีกเลี่ยงปัญหานี้ได้ การใช้มิกซ์ซินไม่ได้เป็นการกำจัดการสืบทอดทั้งหมดเนื่องจากคลาสทดสอบของเบราว์เซอร์ยังคงต้องรับค่าจาก MixinBasedInProcessBrowserTest แต่โชคดีที่คลาสพื้นฐานเป็นคลาสอเนกประสงค์และใช้ทรัพยากรน้อย

แหล่งข้อมูล