คำแนะนำนี้จะอธิบายวิธีเรียกใช้การทดสอบเครื่องมือวัดประสิทธิภาพ, 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
: ดูข้อมูลเพิ่มเติมเกี่ยวกับ AndroidMODEL_ID
ที่เฉพาะเจาะจง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 versions list
คอลัมน์แรกของเอาต์พุตคําสั่ง
LOCALE
มีตัวระบุที่คุณสามารถใช้ภายหลังเพื่อเรียกใช้การทดสอบกับภาษา หากคุณไม่ได้ระบุภาษาที่จะทดสอบ ระบบจะใช้ภาษาอังกฤษเป็นภาษาเริ่มต้น
ขั้นตอนที่ 3 ทำการทดสอบ
เมื่อทราบช่วงรุ่นอุปกรณ์ ภาษา และเวอร์ชันระบบปฏิบัติการที่ใช้ทดสอบแอปได้แล้ว คุณสามารถระบุอุปกรณ์โดยใช้คำสั่ง gcloud firebase test android run
และ Flag --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
- เพื่อช่วยในการระบุและค้นหาเมทริกซ์ทดสอบในคอนโซล Firebase คุณใช้แฟล็ก
--client-details matrixLabel="Example matrix label"
ที่ไม่บังคับเพื่อติดป้ายกำกับเมทริกซ์ทดสอบได้ - คุณดูตัวเลือกบรรทัดคำสั่งทั้งหมดสําหรับการเรียกใช้การทดสอบได้โดยพิมพ์
gcloud help firebase test android run
คุณสามารถระบุอาร์กิวเมนต์ในไฟล์อาร์กิวเมนต์รูปแบบ YAML (ไม่บังคับ) แทนการระบุอาร์กิวเมนต์เหล่านี้ในบรรทัดคำสั่ง เรียกใช้
gcloud topic arg-files
เพื่อดูวิธีใช้ฟีเจอร์นี้
ดูวิธีตรวจสอบผลการทดสอบจากการทดสอบด้วยโรโบได้ที่หัวข้อวิเคราะห์ผลการทดสอบ
ทำการทดสอบการใช้เครื่องมือ
ตอนนี้ให้ใช้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 เวอร์ชัน 1.1 ขึ้นไป หากต้องการเปิดใช้ ให้ใช้ gcloud firebase test android run
พร้อมแฟล็ก --use-orchestrator
หากต้องการปิดใช้ ให้ใช้แฟล็ก --no-use-orchestrator
นอกจากนี้ คุณยังควบคุมวิธีที่ Test Lab เรียกใช้การทดสอบเครื่องมือวัดได้ด้วยโดยใช้ Flag เพิ่มเติมที่ไม่ได้แสดงด้านบน เช่น คุณสามารถใช้แฟล็ก --test-targets
เพื่อทดสอบคลาสเดียวหรือเมธอดของคลาสที่ APK การทดสอบใช้ คุณยังดูได้ว่าการทดสอบที่ล้มเหลวนั้นไม่น่าเชื่อถือจริงหรือไม่ โดยใช้แฟล็ก --num-flaky-test-attempts
ซึ่งระบุจำนวนครั้งที่ควรลองดำเนินการทดสอบอีกครั้งหากกรอบการทดสอบอย่างน้อย 1 รายการล้มเหลวไม่ว่าด้วยเหตุผลใดก็ตาม ดูข้อมูลเพิ่มเติมได้ที่การเรียกใช้การทดสอบ gcloud ของ firebase สำหรับ Android
รายงานการครอบคลุมโค้ดสําหรับการทดสอบการใช้เครื่องมือ
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
คำสั่งและ Flag ที่พร้อมใช้งาน
Test Lab gcloud CLI มีคำสั่งและ Flag หลายรายการที่ช่วยให้คุณทำการทดสอบตามข้อกำหนดต่างๆ ได้ ดังนี้
Flag ของ Android Test Orchestrator: Flag เพื่อเปิดใช้ Orchestrator ซึ่งเป็นเครื่องมือที่ช่วยให้คุณทำการทดสอบแอปแต่ละรายการในการเรียกใช้
Instrumentation
ของตนเองได้ Test Lab ทำงานด้วย Orchestrator เวอร์ชันล่าสุดเสมอFlag การทดสอบ Game Loop: กลุ่ม Flag การกําหนดค่าที่เปิดใช้และควบคุม "โหมดสาธิต" เพื่อจําลองการดําเนินการของผู้เล่นในแอปเกม ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้การทดสอบ Game Loop ด้วย Test Lab
แฟล็ก Uniform Sharding (ในเบต้า): แฟล็กที่ระบุจำนวนชาร์ดที่คุณต้องการกระจายกรอบการทดสอบอย่างเท่าเทียมกัน ชาร์ดจะทํางานพร้อมกันในอุปกรณ์แยกต่างหาก
ด้วยFlag การแยกกลุ่มด้วยตนเอง (เบต้า): Flag ที่ระบุกลุ่มแพ็กเกจ คลาส และ/หรือกรณีทดสอบที่จะเรียกใช้ในกลุ่ม (กลุ่มกรณีทดสอบ) ชาร์ดจะทํางานพร้อมกันในอุปกรณ์แยกต่างหาก
การแจ้งโปรไฟล์การเข้าชมเครือข่าย (ในเบต้า): การแจ้งที่ระบุว่าการทดสอบใช้โปรไฟล์เครือข่ายใดกับอุปกรณ์จริง โปรไฟล์เครือข่ายจะจำลองเงื่อนไขของเครือข่ายที่หลากหลาย ซึ่งช่วยให้คุณทดสอบประสิทธิภาพของแอปบนเครือข่ายที่ไม่น่าเชื่อถือหรือคาดเดาไม่ได้
การใช้สคริปต์คำสั่ง 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 | เกิดข้อผิดพลาดในการทดสอบโครงสร้างพื้นฐาน |