คู่มือนี้อธิบายวิธีเรียกใช้การทดสอบเครื่องมือ, 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 ที่รองรับ 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 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
- คุณสามารถใช้แฟล็ก
--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
เพื่อดูรายงานความครอบคลุมของโค้ด
วิเคราะห์ผลการทดสอบ
หลังจากนั้นไม่กี่นาที เครื่องมือ 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
คำสั่งและแฟล็กที่ใช้ได้
Test Lab gcloud CLI มีคำสั่งและแฟล็กหลายรายการที่ช่วยให้คุณ เรียกใช้การทดสอบด้วยข้อกำหนดต่างๆ ได้
แฟล็ก Android Test Orchestrator: แฟล็กที่ใช้เปิดใช้ Orchestrator ซึ่งเป็นเครื่องมือที่ช่วยให้คุณเรียกใช้การทดสอบแต่ละรายการของแอป ในการเรียกใช้
Instrumentation
ของตัวเองได้ Test Lab จะเรียกใช้ Orchestrator เวอร์ชันล่าสุดเสมอFlag การทดสอบ Game Loop: ชุด Flag การกำหนดค่าที่เปิดใช้และควบคุม "โหมด การสาธิต" เพื่อจำลองการกระทำของผู้เล่นในแอปเกม ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้ การทดสอบ Game Loop ด้วย Test Lab
แฟล็กการแบ่งส่วนแบบสม่ำเสมอ (เบต้า): แฟล็กที่ระบุจำนวนชาร์ดที่คุณต้องการกระจายกรณีทดสอบอย่างเท่าเทียมกัน ชาร์ดจะทำงานแบบขนานในอุปกรณ์แยกกัน
ด้วยแฟล็กการแบ่งข้อมูลด้วยตนเอง (ในเวอร์ชันเบต้า): แฟล็กที่ระบุกลุ่มแพ็กเกจ คลาส และ/หรือกรณีทดสอบที่จะเรียกใช้ ใน 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 | เกิดข้อผิดพลาดเกี่ยวกับโครงสร้างพื้นฐานของการทดสอบ |