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