คู่มือนี้อธิบายวิธีเรียกใช้การทดสอบเครื่องมือ 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 ที่รองรับ Application Binary Interface (ABI) ที่รองรับ วันที่วางจำหน่าย และระบุว่าอุปกรณ์เป็นอุปกรณ์จริงหรืออุปกรณ์เสมือน
versions list: ดูรายการเวอร์ชันระบบปฏิบัติการที่พร้อมให้ทดสอบในปัจจุบันgcloud firebase test android versions listคุณสามารถใช้ตัวระบุจาก 2 คอลัมน์แรกของเอาต์พุตคำสั่ง (
OS_VERSION_IDและVERSION) เพื่อเรียกใช้การทดสอบกับ Android OS เวอร์ชันใดเวอร์ชันหนึ่งในภายหลัง หากไม่ได้ระบุเวอร์ชันระบบปฏิบัติการ 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- หากต้องการช่วยคุณระบุและค้นหาเมทริกซ์ทดสอบในFirebaseคอนโซล
คุณสามารถใช้
--client-details matrixLabel="Example matrix label"แฟล็กที่ไม่บังคับเพื่อติดป้ายกำกับเมทริกซ์ทดสอบได้ - คุณดูชุดตัวเลือกบรรทัดคำสั่งทั้งหมดสำหรับการ
เรียกใช้การทดสอบได้โดยพิมพ์
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 กับ Flag --use-orchestrator
หากต้องการปิดใช้ ให้ใช้แฟล็ก --no-use-orchestrator
นอกจากนี้ คุณยังควบคุมวิธีที่ Test Lab เรียกใช้การทดสอบเครื่องมือ
โดยใช้ Flag เพิ่มเติมที่ไม่ได้แสดงไว้ข้างต้นได้ด้วย เช่น คุณสามารถใช้แฟล็ก
--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 คือ
สตริงข้อความ นอกจากนี้ คุณยังใช้ Flag นี้เพื่อบอกให้ Robo ไม่สนใจองค์ประกอบ UI ที่เฉพาะเจาะจง (เช่น ปุ่ม "ออกจากระบบ") ได้ด้วย
EditText
รองรับฟิลด์ แต่ไม่รองรับฟิลด์ข้อความในองค์ประกอบ UI ของ WebView
เช่น คุณอาจใช้พารามิเตอร์ต่อไปนี้สําหรับการเข้าสู่ระบบที่กําหนดเอง
--robo-directives username_resource=username,password_resource=password
คำสั่งและ Flag ที่ใช้ได้
Test Lab gcloud CLI มีคำสั่งและแฟล็กหลายรายการที่ช่วยให้คุณ เรียกใช้การทดสอบด้วยข้อกำหนดต่างๆ ได้
Flag ของ Android Test Orchestrator: Flag ที่ใช้เปิดใช้ Orchestrator ซึ่งเป็นเครื่องมือที่ช่วยให้คุณเรียกใช้การทดสอบแต่ละรายการของแอป ในการเรียกใช้
Instrumentationของตัวเองได้ Test Lab จะเรียกใช้ Orchestrator เวอร์ชันล่าสุดเสมอแฟล็กการทดสอบ Game Loop: ชุดแฟล็กการกำหนดค่าที่เปิดใช้และควบคุม "โหมด การสาธิต" เพื่อจำลองการกระทำของผู้เล่นในแอปเกม ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้ การทดสอบ Game Loop ด้วย Test Lab
Uniform Sharding flag (เบต้า): แฟล็กที่ระบุจำนวน Shard ที่คุณต้องการกระจายกรณีทดสอบอย่างเท่าเทียมกัน โดยจะเรียกใช้ Shard แบบขนานในอุปกรณ์แยกกัน
ด้วยแฟล็กการแบ่งพาร์ติชันด้วยตนเอง (เบต้า): แฟล็กที่ระบุกลุ่มแพ็กเกจ คลาส และ/หรือกรณีทดสอบที่จะเรียกใช้ ในพาร์ติชัน (กลุ่มกรณีทดสอบ) โดยจะเรียกใช้ Shard แบบขนานใน อุปกรณ์แยกกัน
แฟล็กโปรไฟล์การจราจรของข้อมูลในเครือข่าย (เบต้า): แฟล็กที่ระบุโปรไฟล์เครือข่ายที่การทดสอบใช้กับอุปกรณ์จริง โปรไฟล์เครือข่ายจะจำลองสภาวะเครือข่ายต่างๆ เพื่อให้คุณทดสอบประสิทธิภาพของแอปในเครือข่ายที่ไม่น่าเชื่อถือหรือคาดเดาไม่ได้
การเขียนสคริปต์คำสั่ง gcloud ด้วย Test Lab
คุณสามารถใช้สคริปต์เชลล์หรือไฟล์ชุดคำสั่งเพื่อทำให้คำสั่งทดสอบแอปบนอุปกรณ์เคลื่อนที่ทำงานโดยอัตโนมัติ ซึ่งปกติแล้วคุณจะเรียกใช้โดยใช้บรรทัดคำสั่ง 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 | เกิดข้อผิดพลาดเกี่ยวกับโครงสร้างพื้นฐานของการทดสอบ |