การแก้ปัญหา Test Lab คำถามที่พบบ่อย

หน้านี้ให้ความช่วยเหลือในการแก้ปัญหาและคำตอบสำหรับคำถามที่พบบ่อยเกี่ยวกับการทดสอบด้วย Firebase Test Lab นอกจากนี้ เรายังบันทึกปัญหาที่ทราบไว้ด้วย หากไม่พบสิ่งที่ต้องการหรือต้องการความช่วยเหลือเพิ่มเติม โปรดเข้าร่วมแชแนล #test-lab ใน Firebase Slack หรือติดต่อทีมสนับสนุนของ Firebase

การแก้ปัญหา

เมื่อเลือกอุปกรณ์ที่มีระดับความจุสูงในTest Labแคตตาล็อก การทดสอบอาจเริ่มต้นเร็วขึ้น เมื่ออุปกรณ์มีความจุต่ำ การทดสอบอาจใช้เวลานานขึ้น หากจำนวนการทดสอบที่เรียกใช้มากกว่าความจุของอุปกรณ์ที่เลือก การทดสอบอาจใช้เวลานานขึ้น

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

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับความจุของอุปกรณ์ใน Test Lab ได้ที่ข้อมูลความจุของอุปกรณ์สำหรับ Android และ iOS

ผลการทดสอบที่สรุปไม่ได้มักเกิดขึ้นเนื่องจากการทดสอบถูกยกเลิกหรือข้อผิดพลาดด้านโครงสร้างพื้นฐาน

ข้อผิดพลาดเกี่ยวกับโครงสร้างพื้นฐานเกิดจากปัญหาTest Labภายใน เช่น ข้อผิดพลาดเกี่ยวกับเครือข่ายหรือลักษณะการทํางานของอุปกรณ์ที่ไม่คาดคิด Test Lab หยุดการเรียกใช้การทดสอบภายในซึ่งก่อให้เกิดข้อผิดพลาดด้านโครงสร้างพื้นฐานหลายครั้งก่อนที่จะรายงานผลลัพธ์ที่ไม่แน่ใจ อย่างไรก็ตาม คุณสามารถปิดใช้การลองอีกครั้งเหล่านี้ได้โดยใช้ failFast

หากต้องการระบุสาเหตุของข้อผิดพลาด ให้ทำตามขั้นตอนต่อไปนี้

  1. ตรวจสอบการหยุดทำงานที่ทราบในแดชบอร์ดสถานะ Firebase
  2. ทดสอบอีกครั้งใน Test Lab เพื่อยืนยันว่าสามารถทําให้เกิดข้อบกพร่องซ้ำได้

  3. ลองทำการทดสอบในอุปกรณ์หรือประเภทอุปกรณ์อื่น (หากมี)

หากยังพบปัญหาอยู่ โปรดติดต่อทีม Test Lab ในช่อง#test-lab บน Firebase Slack

การใช้ชาร์ดอาจทําให้การทดสอบใช้เวลานานขึ้นเมื่อจํานวนชาร์ดที่คุณระบุมากกว่าจํานวนอุปกรณ์ที่ใช้ได้ใน Test Lab หากต้องการหลีกเลี่ยงสถานการณ์นี้ ให้ลองเปลี่ยนไปใช้อุปกรณ์อื่น ดูข้อมูลเพิ่มเติมเกี่ยวกับการเลือกอุปกรณ์อื่นได้ที่ ความจุของอุปกรณ์

เมื่อคุณส่งคำขอทดสอบ ระบบจะตรวจสอบแอป ลงชื่อแอปอีกครั้ง ฯลฯ ก่อนเพื่อเตรียมพร้อมสำหรับการทดสอบบนอุปกรณ์ โดยปกติแล้วขั้นตอนนี้จะเสร็จสมบูรณ์ภายในเวลาไม่ถึง 2-3 วินาที แต่อาจได้รับผลกระทบจากปัจจัยต่างๆ เช่น ขนาดของแอป

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

เวลาการเรียกเก็บเงิน

หลังจากการดําเนินการทดสอบเสร็จสิ้น ระบบจะดาวน์โหลดอาร์ติแฟกต์การทดสอบจากอุปกรณ์ ประมวลผล และอัปโหลดไปยัง Cloud Storage ระยะเวลาของขั้นตอนนี้อาจขึ้นอยู่กับจํานวนและความของอาร์ติแฟกต์

ระบบจะจัดเก็บรายการต่างๆ ของการดำเนินการทดสอบ (เช่น ภาพหน้าจอและไฟล์บันทึก) ใน Google Cloud Storage และแสดงผลในคอนโซล Firebase โดยตรง หากการเรียกใช้การทดสอบดำเนินการภายใน 90 วันที่ผ่านมา ให้ตรวจสอบว่าคุณมีบทบาทระดับโปรเจ็กต์ที่กำหนดไว้ (เจ้าของโปรเจ็กต์ ผู้แก้ไขโปรเจ็กต์ หรือผู้ดูโปรเจ็กต์) โปรดตรวจสอบว่าไม่ได้เปิดใช้ Cloud Audit Logging สำหรับโปรเจ็กต์หรือองค์กรของคุณ

หากการดําเนินการเกิดขึ้นนานกว่า 90 วัน อาร์ติแฟกต์การทดสอบอาจถูกลบโดยอัตโนมัติ คุณสามารถตรวจสอบการกำหนดค่าที่เก็บผลลัพธ์ได้โดยคลิกแท็บทดสอบผลลัพธ์ในแดชบอร์ดTest Lab ระบบกําหนดค่าที่เก็บข้อมูลผลลัพธ์เริ่มต้นให้เก็บออบเจ็กต์ไว้เป็นเวลา 90 วัน

หากต้องการเก็บอาร์ติแฟกต์การทดสอบไว้นานขึ้น ให้เรียกใช้คําสั่ง gcloud firebase test android run พร้อม Flag --results-bucket และส่งชื่อที่เก็บข้อมูลผลลัพธ์ ดูข้อมูลเพิ่มเติมได้ที่gcloud firebase test android run เอกสารอ้างอิง

เมื่อเรียกใช้การทดสอบเครื่องมือวัดผล คุณอาจเห็นข้อผิดพลาดการทดสอบที่บ่งบอกถึงผลลัพธ์บางส่วนซึ่งมีข้อความ เช่น Test run failed to complete. Expected x tests, received y (โดยที่ y น้อยกว่า x) ข้อผิดพลาดนี้หมายความว่า Test Lab ไม่สามารถแยกวิเคราะห์บันทึกสำหรับเครื่องหมายเริ่มต้นหรือสิ้นสุดของข้อเท็จจริงทดสอบ ซึ่งโดยปกติแล้วAndroidJUnitRunner จะสร้างขึ้น

สาเหตุที่พบบ่อยของปัญหานี้ ได้แก่

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

คำถามที่พบบ่อย

Firebase Test Lab มีโควต้าที่ไม่มีค่าใช้จ่ายสำหรับการทดสอบบนอุปกรณ์และการใช้ Cloud API โปรดทราบว่าโควต้าการทดสอบจะใช้แพ็กเกจราคา Firebase มาตรฐาน ส่วนโควต้า Cloud API จะไม่ใช้

  • โควต้าการทดสอบ

    โควต้าการทดสอบจะกำหนดโดยจำนวนอุปกรณ์ที่ใช้ทำการทดสอบ แพ็กเกจ Firebase Spark มีโควต้าการทดสอบแบบคงที่โดยไม่มีค่าใช้จ่ายสำหรับผู้ใช้ สำหรับแพ็กเกจ Blaze โควต้าอาจเพิ่มขึ้นหากการใช้งาน Google Cloud เพิ่มขึ้นเมื่อเวลาผ่านไป หากใช้โควต้าการทดสอบครบแล้ว โปรดรอจนถึงวันถัดไปหรืออัปเกรดเป็นแพ็กเกจ Blaze หากคุณใช้แพ็กเกจ Spark อยู่ หากใช้แพ็กเกจ Blaze อยู่แล้ว คุณสามารถขอเพิ่มโควต้าได้ ดูข้อมูลเพิ่มเติมได้ที่โควต้าการทดสอบ

    คุณสามารถตรวจสอบการใช้โควต้าการทดสอบได้ในคอนโซล Google Cloud

  • โควต้า Cloud Testing API

    Cloud Testing API มีขีดจํากัดโควต้า 2 รายการ ได้แก่ คําขอต่อวันต่อโปรเจ็กต์และคําขอต่อทุกๆ 100 วินาทีต่อโปรเจ็กต์ คุณสามารถตรวจสอบการใช้งานได้ในคอนโซล Google Cloud

  • โควต้า Cloud Tool Results API

    Cloud Tool Results API มีขีดจํากัดโควต้า 2 รายการ ได้แก่ การค้นหาต่อวันต่อโปรเจ็กต์ และการค้นหาทุกๆ 100 วินาทีต่อโปรเจ็กต์ คุณสามารถตรวจสอบการใช้งานได้ในคอนโซล Google Cloud

    ดูข้อมูลเพิ่มเติมเกี่ยวกับขีดจํากัดของ API ได้ที่โควต้า Cloud API สําหรับ Test Lab หากคุณใช้โควต้า API ถึงขีดจํากัดแล้ว ให้ทำดังนี้

    • ส่งคำขอโควต้าที่สูงขึ้นโดยแก้ไขโควต้าในคอนโซล Google Cloud โดยตรง (โปรดทราบว่าขีดจำกัดส่วนใหญ่จะตั้งค่าเป็นสูงสุดโดยค่าเริ่มต้น) หรือ

    • ขอโควต้า API ที่สูงขึ้นโดยกรอกแบบฟอร์มคำขอในGoogle Cloudคอนโซล หรือติดต่อทีมสนับสนุน Firebase

จากแบ็กเอนด์ คุณสามารถระบุได้ว่าการเข้าชมมาจากอุปกรณ์ทดสอบที่โฮสต์โดย Firebase หรือไม่โดยตรวจสอบที่อยู่ IP ต้นทางกับช่วง IP

Test Lab ไม่ทำงานร่วมกับ VPC-SC ซึ่งบล็อกการคัดลอกแอปและรายการอื่นๆ ที่ใช้ทดสอบระหว่างพื้นที่เก็บข้อมูลภายในของ Test Lab กับที่เก็บข้อมูลผลลัพธ์ของผู้ใช้

หากต้องการตรวจหาลักษณะการทำงานที่ไม่เสถียรในการทดสอบ เราขอแนะนำให้ใช้ตัวเลือก --num-flaky-test-attempts ระบบจะเรียกเก็บเงินหรือนับการเรียกใช้ Deflake ซ้ำในโควต้ารายวันเช่นเดียวกับการเรียกใช้การทดสอบตามปกติ

โปรดทราบข้อมูลต่อไปนี้

  • การดําเนินการทดสอบทั้งหมดจะทํางานอีกครั้งเมื่อตรวจพบความล้มเหลว ระบบไม่รองรับการลองทดสอบเฉพาะกรอบการทดสอบที่ล้มเหลวอีกครั้ง
  • ระบบจะกำหนดเวลาให้การดำเนินการแยกไฟล์แฟล็กอีกครั้งทำงานพร้อมกัน แต่ไม่ได้รับประกันว่าจะทำงานพร้อมกัน เช่น เมื่อปริมาณการเข้าชมมากกว่าจำนวนอุปกรณ์ที่ใช้ได้

แน่นอน Test Lab รองรับ Google Pixel Watch ตอนนี้คุณทดสอบแอป Wear แบบสแตนด์อโลนใน Google Pixel Watch ได้แล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับอุปกรณ์ Test Lab ได้ที่ทดสอบในอุปกรณ์ที่ใช้ได้

แน่นอน Test Lab รองรับ Google Pixel Tablet และ Google Pixel Fold คุณสามารถเรียกใช้การทดสอบในอุปกรณ์จริงแบบสแตนด์อโลนได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับอุปกรณ์ Test Lab ได้ที่ทดสอบในอุปกรณ์ที่ใช้ได้

หากคุณกำลังทดสอบแอปใน Firebase หรือทำการทดสอบสำหรับรายงานก่อนการเปิดตัวใน Play Console คุณสามารถตรวจจับได้ว่ามีการทดสอบในอุปกรณ์ที่โฮสต์โดย Firebase หรือไม่โดยตรวจสอบพร็อพเพอร์ตี้ของระบบ firebase.test.lab ในไฟล์ MainActivity จากนั้นคุณจะเรียกใช้คำสั่งเพิ่มเติมตามค่าบูลีนสำหรับ testLabSetting ได้ ดูข้อมูลเพิ่มเติมได้ที่ลักษณะการทดสอบที่แก้ไขแล้ว

แม้ว่าบางรายการเหล่านี้จะอยู่ในแผนของเรา แต่ปัจจุบันเราไม่สามารถให้คำมั่นสัญญาว่าจะรองรับแพลตฟอร์มการทดสอบและการพัฒนาแอปเหล่านี้ อย่างไรก็ตาม หากสร้างแอปด้วยเฟรมเวิร์กที่ใช้ Espresso ได้ (เช่น Flutter) คุณจะเขียนการทดสอบด้วยเครื่องมือวัดโดยใช้ Espresso แล้วเรียกใช้การทดสอบใน Test Lab ได้

Test Lab ไม่รองรับการสร้างความสับสนหรือการถอดรหัสซอร์สโค้ดที่สร้างความสับสนอย่างชัดเจน แม้ว่าแอปจะมีโอกาสทำงานได้ แต่ข้อมูลแอปที่มีการสร้างความสับสน เช่น สแต็กเทรซ จะปรากฏแบบสร้างความสับสนในบันทึก

แน่นอน คุณสามารถทดสอบอุปกรณ์แบบพับได้ในสถานะและลักษณะการพับ

อุปกรณ์แบบพับได้อาจอยู่ในสถานะพับอยู่หลายสถานะ เช่น FLAT (เปิดจนสุด) หรือ HALF_OPENED (ระหว่างเปิดจนสุดและปิดจนสุด)

ส่วนลักษณะการพับประกอบด้วยการวางแนวอุปกรณ์ที่เฉพาะเจาะจงและสถานะการพับ เช่น การวางแนวตั้งโต๊ะ ซึ่งเป็นสถานะ HALF_OPENED ในการวางแนวนอน หรือการวางแนวหนังสือ ซึ่งเป็นสถานะ HALF_OPENED ในการวางแนวตั้ง

หากทำการทดสอบเครื่องมือวัดผล คุณสามารถใช้ไลบรารี Jetpack WindowManager และทําตามเอกสารประกอบการทดสอบแอปบนอุปกรณ์แบบพับเพื่อทดสอบสถานะและลักษณะการใช้งานต่างๆ

หรือสถานะที่ใช้ได้จะเป็นสถานะที่เจาะจงอุปกรณ์และโต้ตอบด้วยได้โดยใช้ adb shell command cmd device_state

  • หากต้องการแสดงรายการสถานะปัจจุบัน ให้เรียกใช้ adb shell cmd device_state state
  • หากต้องการตั้งค่าหรือลบล้างสถานะปัจจุบัน ให้เรียกใช้ adb shell cmd device_state state <IDENTIFIER>
  • หากต้องการรีเซ็ตสถานะ ให้เรียกใช้ adb shell cmd device_state state reset
  • หากต้องการตรวจสอบสถานะที่ใช้ได้ ให้เรียกใช้adb shell cmd device_state print-states คำสั่งในอุปกรณ์แบบพับได้
$ adb shell cmd device_state print-states
Supported states: [
    DeviceState{identifier=0, name='CLOSED', app_accessible=true},
    DeviceState{identifier=1, name='HALF_OPENED', app_accessible=true},
    DeviceState{identifier=2, name='OPENED', app_accessible=true},
    DeviceState{identifier=3, name='REAR_DISPLAY_STATE', app_accessible=true},
]
$ adb shell cmd device_state print-states
Supported states: [
    DeviceState{identifier=0, name='CLOSE', app_accessible=true},
    DeviceState{identifier=1, name='TENT', app_accessible=true},
    DeviceState{identifier=2, name='HALF_FOLDED', app_accessible=true},
    DeviceState{identifier=3, name='OPEN', app_accessible=true},
]

คุณไม่จำเป็นต้องเพิ่ม Firebase SDK เพื่อใช้ Test Lab ซึ่งแตกต่างจากผลิตภัณฑ์อื่นๆ ของ Firebase หากยังไม่มีแอป คุณสามารถดาวน์โหลด APK ทางออนไลน์หรือสร้างแอปและ APK ทดสอบจากตัวอย่างรายการใดรายการหนึ่งในที่เก็บ GitHub ของ AndroidX โปรดทราบว่าคุณต้องใช้ไฟล์ APK ของแอปเท่านั้นเพื่อเรียกใช้การทดสอบ Robo ส่วนการทดสอบเครื่องมือวัดผลต้องใช้ทั้งแอปและ APK ทดสอบที่สร้างจากซอร์สโค้ด ดูข้อมูลเพิ่มเติมได้ที่การทดสอบที่มีเครื่องมือวัด

ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ Test Lab ได้ที่หัวข้อเริ่มต้นการทดสอบสำหรับ Android ด้วย Firebase Test Lab

การทดสอบความแตกต่างของภาพหน้าจอคือการทดสอบการยืนยันโดยอิงตามการเปรียบเทียบภาพหน้าจอที่ได้ขณะทำการทดสอบกับภาพมาตรฐานที่แสดงถึงลักษณะการทำงานที่คาดไว้ การทดสอบดังกล่าวอาจทำงานได้ไม่ดีในอุปกรณ์บางประเภทมากกว่าอุปกรณ์ประเภทอื่นๆ เราขอแนะนำให้กําหนดเป้าหมายอุปกรณ์จําลอง Arm (*.arm) สําหรับการทดสอบประเภทนี้ อุปกรณ์โปรแกรมจำลอง Arm ใช้รูปภาพที่คล้ายกันมากหรือเหมือนกับโปรแกรมจำลอง "ทั่วไป" ของ Android Studio

นอกจากนี้ เราขอแนะนําให้คุณตรวจสอบคลังทดสอบที่ทําให้การทดสอบภาพหน้าจอมีประสิทธิภาพมากขึ้นเมื่อมีการเปลี่ยนแปลงที่คาดไว้

แน่นอน อุปกรณ์เสมือนจะอัปเดตเมื่อมีการเปลี่ยนแปลงต่อไปนี้

  1. การอัปเดตรูปภาพที่มีอยู่
  2. การเลิกใช้งาน API ระดับก่อนหน้า
  3. เพิ่มระดับ API ของ Android ใหม่

หากต้องการเปิดใช้รายงานความครอบคลุม ให้เพิ่ม coverage=true ลงในช่อง environmentVariables หากใช้ Android Test Orchestrator คุณจะต้องระบุไดเรกทอรีเพื่อจัดเก็บผลการครอบคลุม ดังนี้

--environment-variables coverage=true,coverageFilePath=/sdcard/Download/

หากไม่ได้ใช้ Orchestrator คุณสามารถระบุเส้นทางไฟล์ได้โดยทำดังนี้

--environment-variables coverage=true,coverageFile=/sdcard/Download/coverage.ec

ข้อมูลโดยละเอียดของอุปกรณ์จะพร้อมใช้งานผ่าน API และเข้าถึงได้จากไคลเอ็นต์ gcloud โดยใช้คำสั่ง describe

gcloud firebase test android models describe MODEL

ปัญหาที่ทราบ

การทดสอบด้วยโรโบทไม่สามารถข้ามหน้าจอลงชื่อเข้าใช้ที่กําหนดให้ผู้ใช้ดําเนินการเพิ่มเติมนอกเหนือจากการป้อนข้อมูลเข้าสู่ระบบเพื่อลงชื่อเข้าใช้ เช่น การทํา CAPTCHA ให้เสร็จสมบูรณ์

การทดสอบ Robo เหมาะสําหรับแอปที่ใช้องค์ประกอบ UI จากเฟรมเวิร์ก UI ของ Android (รวมถึงออบเจ็กต์ View, ViewGroup และ WebView) หากคุณใช้การทดสอบ Robo เพื่อทดสอบแอปที่ใช้เฟรมเวิร์ก UI อื่นๆ รวมถึงแอปที่ใช้เครื่องมือสร้างเกม Unity การทดสอบอาจออกโดยไม่สำรวจหน้าจอแรก