คู่มือนี้อธิบายวิธีเรียกใช้การทดสอบการใช้เครื่องมือ, Robo หรือ Game Loop โดยใช้ gcloud CLI
ดูรายการคำสั่ง gcloud ทั้งหมดที่คุณใช้กับแอป Android ใน Test Lab ได้ที่เอกสารอ้างอิงสำหรับ gcloud firebase test android
ก่อนเริ่มต้น
เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้เพิ่ม
ขั้นตอนที่ 1 ตั้งค่า gcloud CLI
- ดาวน์โหลด Google Cloud SDK
- ตรวจสอบว่าการติดตั้งเป็นเวอร์ชันล่าสุด โดยทำดังนี้
gcloud components update
- ลงชื่อเข้าใช้ gcloud CLI ด้วยบัญชี Google โดยทำดังนี้
gcloud auth login
- ตั้งค่าโปรเจ็กต์ Firebase ใน gcloud โดยที่ PROJECT_ID คือรหัสของโปรเจ็กต์ Firebase
gcloud config set project PROJECT_ID
ซึ่งรวมถึงเครื่องมือ gcloud CLI
ขั้นตอนที่ 2 ตรวจสอบอุปกรณ์ทดสอบที่พร้อมใช้งาน
ใช้คำสั่ง gcloud ต่อไปนี้เพื่อดูอุปกรณ์ทดสอบและภาษาที่ใช้ได้สำหรับการทดสอบ
นอกจากนี้ คุณยังเลือกดาวน์โหลดแอป Notepad ตัวอย่างเพื่อเริ่มเรียกใช้คำสั่งได้ทันที ใช้ไฟล์ไบนารี app-debug-unaligned.apk และไฟล์การทดสอบการวัดคุม app-debug-test-unaligned.apk ซึ่งอยู่ใน NotePad/app/build/outputs/apk/
models list: ดูรายการอุปกรณ์ Android ปัจจุบันที่พร้อมให้คุณทดสอบgcloud firebase test android models listในเอาต์พุตจากคำสั่ง ให้ทำดังนี้
- คอลัมน์
MODEL_IDมีตัวระบุที่คุณสามารถใช้เพื่อทำการทดสอบในรุ่นอุปกรณ์ในภายหลังได้ - คอลัมน์
OS_VERSION_IDมีเวอร์ชันระบบปฏิบัติการที่อุปกรณ์รองรับ
ตัวอย่างเอาต์พุต

- คอลัมน์
models describe: ดูข้อมูลเพิ่มเติมเกี่ยวกับMODEL_IDของ Android ที่เฉพาะเจาะจงgcloud firebase test android models describe MODEL_IDเอาต์พุตประกอบด้วยแบรนด์ ผู้ผลิต เวอร์ชันระบบปฏิบัติการ ระดับ API ที่รองรับ อินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (ABI) ที่รองรับ วันที่วางจำหน่าย และข้อมูลว่าอุปกรณ์เป็นอุปกรณ์จริงหรืออุปกรณ์เสมือน
versions list: ดูรายการเวอร์ชันระบบปฏิบัติการที่พร้อมให้ทดสอบในปัจจุบันgcloud firebase test android versions listคุณสามารถใช้ตัวระบุจากคอลัมน์ใดคอลัมน์หนึ่งใน 2 คอลัมน์แรกของเอาต์พุตจากคำสั่ง (
OS_VERSION_IDและVERSION) เพื่อทำการทดสอบกับเวอร์ชันระบบปฏิบัติการ Android ในภายหลังได้ หากคุณไม่ได้ระบุเวอร์ชันระบบปฏิบัติการ Android ที่จะทดสอบ ระบบจะใช้ค่าเริ่มต้นที่ระบุไว้ในคอลัมน์TAGSตัวอย่างเอาต์พุต

locales list: รับรายการภาษาปัจจุบันที่พร้อมให้ทดสอบgcloud firebase test android locales listคอลัมน์แรกของเอาต์พุตจากคำสั่ง
LOCALEจะมีตัวระบุที่คุณสามารถใช้ในภายหลังเพื่อเรียกใช้การทดสอบกับภาษา หากคุณไม่ได้ระบุภาษาที่จะทดสอบ ระบบจะใช้ภาษาอังกฤษเป็นภาษาเริ่มต้น
ขั้นตอนที่ 3 ทำการทดสอบ
เมื่อทราบช่วงของรุ่นอุปกรณ์ ภาษา และเวอร์ชันระบบปฏิบัติการที่พร้อมให้ทดสอบแอปแล้ว คุณสามารถระบุอุปกรณ์ได้โดยใช้คำสั่ง gcloud firebase test android run และแฟล็ก --device เพื่อเรียกใช้การทดสอบ Robo หรือการทดสอบการวัดคุม
ทำการทดสอบ Robo
แม้ว่าจะไม่มีการทดสอบการวัดคุม แต่คุณก็ยังค้นหาข้อบกพร่องในแอปได้โดยใช้การทดสอบ Robo เพื่อตรวจสอบอินเทอร์เฟซผู้ใช้ของแอปโดยอัตโนมัติ การทดสอบ Robo จะทดสอบแอปโดยทำการวิเคราะห์แบบคงที่ของเส้นทางต่างๆ ผ่านอินเทอร์เฟซผู้ใช้ของแอป จากนั้นจะทำการ Crawl แอปเพื่อค้นหาข้อขัดข้องและปัญหาอื่นๆ ที่อาจเกิดขึ้น
หากต้องการเรียกใช้การทดสอบ Robo ให้เรียกใช้คำสั่งตัวอย่างต่อไปนี้
gcloud firebase test android run \ --type robo \ --app app-debug-unaligned.apk \ --device model=Nexus6,version=21,locale=en,orientation=portrait \ --device model=Nexus7,version=19,locale=fr,orientation=landscape \ --timeout 90s \ --client-details matrixLabel="Example matrix label"
- พารามิเตอร์
--type roboจะเป็นค่าโดยนัยหากไม่ได้ระบุค่า--type - คุณสามารถใช้แฟล็ก
--client-details matrixLabel="Example matrix label"ที่ไม่บังคับเพื่อติดป้ายกำกับเมทริกซ์ทดสอบ ซึ่งจะช่วยให้คุณระบุและค้นหาเมทริกซ์ทดสอบในคอนโซล Firebase ได้ - คุณดูชุดตัวเลือกบรรทัดคำสั่งทั้งหมดสำหรับการทดสอบได้โดยพิมพ์
gcloud help firebase test android run
คุณสามารถระบุอาร์กิวเมนต์ในไฟล์อาร์กิวเมนต์ที่จัดรูปแบบ YAML ได้ (ไม่บังคับ) แทนการระบุอาร์กิวเมนต์เหล่านี้ในบรรทัดคำสั่ง เรียกใช้ gcloud topic arg-files เพื่อดูวิธีใช้ฟีเจอร์นี้
ดูวิธีตรวจสอบผลการทดสอบจากการทดสอบ Robo ได้ที่วิเคราะห์ผลการทดสอบ
เรียกใช้การทดสอบการวัดคุม
ตอนนี้ให้ใช้เครื่องมือบรรทัดคำสั่ง gcloud เพื่อเรียกใช้การทดสอบ Espresso ของแอป Notepad ในการกำหนดค่าอุปกรณ์ Android ที่คุณระบุ ใช้ประเภทการทดสอบ instrumentation เพื่อเรียกใช้การทดสอบใน app-debug-test-unaligned.apk ดังนี้
gcloud firebase test android run \ --type instrumentation \ --app app-debug-unaligned.apk \ --test app-debug-test-unaligned.apk \ --device model=Nexus6,version=21,locale=en,orientation=portrait \ --device model=Nexus7,version=19,locale=fr,orientation=landscape --client-details matrixLabel="Example matrix label"
- พารามิเตอร์การวัดคุม
--typeจะเป็นแบบโดยนัยหากมีการระบุ APK ทดสอบด้วย--test - คุณสามารถใช้แฟล็ก
--client-details matrixLabel="Example matrix label"ที่ไม่บังคับเพื่อติดป้ายกำกับเมทริกซ์ทดสอบเพื่อช่วยระบุและค้นหาเมทริกซ์ทดสอบในคอนโซล Firebase ได้ - คุณดูชุดตัวเลือกบรรทัดคำสั่งทั้งหมดสำหรับการทดสอบได้โดยพิมพ์
gcloud help firebase test android run
คุณสามารถระบุอาร์กิวเมนต์ในไฟล์อาร์กิวเมนต์ที่จัดรูปแบบ YAML ได้ (ไม่บังคับ) แทนการระบุอาร์กิวเมนต์เหล่านี้ในบรรทัดคำสั่ง เรียกใช้ gcloud topic arg-files เพื่อดูวิธีใช้ฟีเจอร์นี้
gcloud CLI รองรับ Android Test Orchestrator
Orchestrator ต้องใช้ AndroidJUnitRunner v1.1 ขึ้นไป หากต้องการเปิดใช้ ให้ใช้ gcloud firebase test android run กับแฟล็ก --use-orchestrator หากต้องการปิดใช้ ให้ใช้แฟล็ก --no-use-orchestrator
นอกจากนี้ คุณยังควบคุมวิธีที่ Test Lab เรียกใช้การทดสอบการวัดคุมได้โดยใช้แฟล็กเพิ่มเติมที่ไม่ได้แสดงไว้ด้านบน ตัวอย่างเช่น คุณสามารถใช้แฟล็ก --test-targets เพื่อทดสอบคลาสเดียวหรือเมธอดคลาสที่ APK ทดสอบใช้ นอกจากนี้ คุณยังดูได้ว่าการทดสอบที่ล้มเหลวนั้นไม่เสถียรจริงหรือไม่โดยใช้แฟล็ก --num-flaky-test-attempts ซึ่งระบุจำนวนครั้งที่ควรพยายามดำเนินการทดสอบอีกครั้งหากกรอบการทดสอบอย่างน้อย 1 รายการล้มเหลวไม่ว่าด้วยเหตุผลใดก็ตาม ดูข้อมูลเพิ่มเติมได้ที่ gcloud firebase test android run
รายงานการครอบคลุมของโค้ดสำหรับการทดสอบการวัดคุม
Test Lab รองรับเครื่องมือการรายงานการครอบคลุมของโค้ด EMMA และ JaCoCo หากคุณผสานรวมเครื่องมืออย่างใดอย่างหนึ่งไว้ในบิลด์สำหรับแอป คุณจะดูรายงานการครอบคลุมของโค้ดสำหรับการทดสอบ Test Lab ได้โดยเรียกใช้ gcloud firebase test android run พร้อมอาร์กิวเมนต์เพิ่มเติมบางรายการ หากไม่ได้เปิดใช้ Android Test Orchestrator ให้ใช้โค้ดต่อไปนี้
gcloud firebase test android run \ --type instrumentation \ --app your-app.apk \ --test your-app-test.apk \ --device model=TestDevice,version=AndroidVersion \ --environment-variables coverage=true,coverageFile="/sdcard/Download/coverage.ec" \ --directories-to-pull /sdcard/Download
หากคุณสร้างรายงานการครอบคลุมของโค้ดขณะที่ใช้ Android Test Orchestrator ด้วย ให้แก้ไขตัวแปรสภาพแวดล้อมดังนี้
gcloud firebase test android run \ --type instrumentation \ --app your-app.apk \ --test your-app-test.apk \ --device model=TestDevice,version=AndroidVersion \ --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \ --directories-to-pull /sdcard/Download
เมื่อ Test Lab ทำการทดสอบเสร็จแล้ว ให้ค้นหารายงานการครอบคลุมของโค้ดใน Google Cloud Storage ดังนี้
- เปิดลิงก์คอนโซล Firebase ที่เครื่องมือ
gcloudพิมพ์ไว้เหนือตารางผลการทดสอบในเทอร์มินัล - คลิกการดำเนินการทดสอบจากรายการที่ลิงก์นั้นเพื่อเปิดหน้ารายละเอียดของการดำเนินการนั้น
- คลิกผลการทดสอบเพื่อไปยังที่เก็บข้อมูล Cloud Storage ที่มีผลการทดสอบของการดำเนินการนั้น
- เปิด
artifacts/coverage.ecเพื่อดูรายงานการครอบคลุมของโค้ด
วิเคราะห์ผลการทดสอบ
หลังจากผ่านไป 2-3 นาที เครื่องมือ gcloud จะพิมพ์สรุปผลการทดสอบเบื้องต้นดังนี้

เอาต์พุตของการทดสอบบรรทัดคำสั่งยังมีลิงก์เพื่อดูผลการทดสอบด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตีความผลลัพธ์เหล่านี้ได้ที่การวิเคราะห์ผลลัพธ์ของ Firebase Test Lab สำหรับ Android
การเข้าสู่ระบบและการป้อนข้อความที่กำหนดเองด้วยการทดสอบ Robo
การทดสอบ Robo จะดำเนินการในหน้าจอลงชื่อเข้าใช้ที่ใช้บัญชี Google เพื่อตรวจสอบสิทธิ์โดยอัตโนมัติ เว้นแต่คุณจะใช้พารามิเตอร์ --no-auto-google-login นอกจากนี้ ยังสามารถกรอกข้อมูลในหน้าจอการเข้าสู่ระบบที่กำหนดเองโดยใช้ข้อมูลเข้าสู่ระบบของบัญชีทดสอบที่คุณระบุได้ด้วย นอกจากนี้ คุณยังใช้พารามิเตอร์นี้เพื่อระบุข้อความที่ผู้ใช้ป้อนเองสำหรับช่องข้อความอื่นๆ ที่แอปใช้ได้ด้วย
หากต้องการกรอกข้อมูลในช่องข้อความในแอป ให้ใช้พารามิเตอร์ --robo-directives และระบุรายการที่คั่นด้วยคอมมาของคู่ key-value โดยที่ key คือชื่อทรัพยากร Android ขององค์ประกอบ UI เป้าหมาย และ value คือสตริงข้อความ นอกจากนี้ คุณยังใช้แฟล็กนี้เพื่อบอกให้ Robo ละเว้นองค์ประกอบ UI ที่เฉพาะเจาะจงได้ด้วย (เช่น ปุ่ม "ออกจากระบบ")
ระบบรองรับช่อง EditText แต่ไม่รองรับช่องข้อความในองค์ประกอบ UI ของ WebView
เช่น คุณสามารถใช้พารามิเตอร์ต่อไปนี้สำหรับการเข้าสู่ระบบที่กำหนดเอง
--robo-directives username_resource=username,password_resource=password
คำสั่งและแฟล็กที่ใช้ได้
Test Lab gcloud CLI มีคำสั่งและแฟล็กหลายรายการที่ช่วยให้คุณทำการทดสอบด้วยข้อกำหนดที่แตกต่างกันได้ ดังนี้
แฟล็ก Android Test Orchestrator: แฟล็กสำหรับเปิดใช้ Orchestrator ซึ่งเป็นเครื่องมือที่ช่วยให้คุณทำการทดสอบแต่ละรายการของแอปในการเรียกใช้
Instrumentationของตัวเองได้ Test Lab จะเรียกใช้ Orchestrator เวอร์ชันล่าสุดเสมอแฟล็กการทดสอบ Game Loop: ชุดแฟล็กการกำหนดค่าที่เปิดใช้และควบคุม "โหมดสาธิต" เพื่อจำลองการดำเนินการของผู้เล่นในแอปเกม ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้การทดสอบ Game Loop ด้วย Test Lab
แฟล็ก Uniform Sharding (ในเวอร์ชันเบต้า): แฟล็กที่ระบุจำนวนชาร์ดที่คุณต้องการกระจายกรอบการทดสอบอย่างสม่ำเสมอ ชาร์ดจะทำงานพร้อมกันในอุปกรณ์ที่แยกกัน
แฟล็ก Manual Sharding (ในเวอร์ชันเบต้า): แฟล็กที่ระบุกลุ่มแพ็กเกจ คลาส และ/หรือกรอบการทดสอบที่จะเรียกใช้ในชาร์ด (กลุ่มกรอบการทดสอบ) ชาร์ดจะทำงานพร้อมกันในอุปกรณ์ที่แยกกัน
แฟล็กโปรไฟล์การจราจรของข้อมูลในเครือข่าย (ในเวอร์ชันเบต้า): แฟล็กที่ระบุโปรไฟล์เครือข่ายที่การทดสอบใช้กับอุปกรณ์จริง โปรไฟล์เครือข่ายจะจำลองสภาพเครือข่ายที่หลากหลาย ซึ่งช่วยให้คุณทดสอบประสิทธิภาพของแอปในเครือข่ายที่ไม่เสถียรหรือคาดเดาไม่ได้
การเขียนสคริปต์คำสั่ง gcloud ด้วย Test Lab
คุณสามารถใช้สคริปต์ของ Shell หรือไฟล์แบตช์เพื่อทำให้คำสั่งทดสอบแอปบนอุปกรณ์เคลื่อนที่เป็นแบบอัตโนมัติ ซึ่งคุณอาจเรียกใช้โดยใช้บรรทัดคำสั่ง gcloud สคริปต์ Bash ตัวอย่างต่อไปนี้จะเรียกใช้การทดสอบการวัดคุมโดยมีระยะหมดเวลา 2 นาที และรายงานว่าการทดสอบเสร็จสมบูรณ์หรือไม่
if gcloud firebase test android run --app my-app.apk --test my-test.apk --timeout 2m
then
echo "Test matrix successfully finished"
else
echo "Test matrix exited abnormally with non-zero exit code: " $?
fi
โค้ดสำหรับออกจากสคริปต์
Test Lab มีรหัสออกหลายรหัสที่คุณสามารถใช้เพื่อทำความเข้าใจผลลัพธ์ของการทดสอบที่เรียกใช้โดยใช้สคริปต์หรือไฟล์แบตช์ได้ดียิ่งขึ้น
โค้ดสำหรับออกจากการเขียนสคริปต์สำหรับ Test Lab
| โค้ดสำหรับออก | หมายเหตุ |
|---|---|
| 0 | การดำเนินการทดสอบทั้งหมดผ่านแล้ว |
| 1 | เกิดความล้มเหลวทั่วไป สาเหตุที่เป็นไปได้ ได้แก่ ไม่มีชื่อไฟล์หรือข้อผิดพลาดเกี่ยวกับ HTTP/เครือข่าย |
| 2 | ออกจากการทดสอบเนื่องจากมีการระบุคำสั่งหรืออาร์กิวเมนต์ที่ไม่รู้จัก |
| 10 | กรอบการทดสอบอย่างน้อย 1 รายการ (คลาสหรือเมธอดคลาสที่ทดสอบ) ในการดำเนินการทดสอบไม่ผ่าน |
| 15 | Firebase Test Lab ไม่สามารถระบุได้ว่าเมทริกซ์ทดสอบผ่านหรือไม่ เนื่องจากเกิดข้อผิดพลาดที่ไม่คาดคิด |
| 18 | ระบบไม่รองรับสภาพแวดล้อมการทดสอบสำหรับการดำเนินการทดสอบนี้เนื่องจากมิติข้อมูลการทดสอบที่เข้ากันไม่ได้ ข้อผิดพลาดนี้อาจเกิดขึ้นหากประเภทอุปกรณ์ที่เลือกไม่รองรับระดับ Android API ที่เลือก |
| 19 | ผู้ใช้ยกเลิกเมทริกซ์ทดสอบ |
| 20 | เกิดข้อผิดพลาดเกี่ยวกับโครงสร้างพื้นฐานของการทดสอบ |