Catch up on highlights from Firebase at Google I/O 2023. Learn more

เริ่มการทดสอบด้วย gcloud CLI

คู่มือนี้อธิบายวิธีเรียกใช้การทดสอบเครื่องมือ Robo หรือ Game Loop โดยใช้ gcloud CLI

สำหรับรายการคำสั่ง gcloud ทั้งหมดที่คุณสามารถใช้กับแอป Android ของคุณใน Test Lab โปรดไปที่ เอกสารอ้างอิงสำหรับ gcloud firebase test android

ก่อนที่คุณจะเริ่มต้น

หากคุณยังไม่ได้ ดำเนินการ ให้เพิ่ม Firebase ในโครงการ Android ของคุณ

ขั้นตอนที่ 1 ตั้งค่า gcloud CLI

  1. ดาวน์โหลด Google Cloud SDK
  2. ซึ่งรวมถึงเครื่องมือ gcloud CLI

  3. ตรวจสอบให้แน่ใจว่าการติดตั้งของคุณเป็นปัจจุบัน:
    gcloud components update
    
  4. ลงชื่อเข้าใช้ gcloud CLI โดยใช้บัญชี Google ของคุณ:
    gcloud auth login
    
  5. ตั้งค่าโครงการ Firebase ของคุณใน gcloud โดยที่ PROJECT_ID คือ ID ของโครงการ Firebase ของคุณ:
    gcloud config set project PROJECT_ID
    

ขั้นตอนที่ 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 มีเวอร์ชันของระบบปฏิบัติการที่อุปกรณ์รองรับ

    ตัวอย่างเอาต์พุต

    gcloud firebase test android models list output

  • models describe : รับข้อมูลเพิ่มเติมเกี่ยวกับ Android MODEL_ID ที่เฉพาะเจาะจง

    gcloud firebase test android models describe MODEL_ID
    

    เอาต์พุตประกอบด้วยยี่ห้อรุ่นของอุปกรณ์ ผู้ผลิต เวอร์ชันของระบบปฏิบัติการ ระดับ API ที่รองรับ Application Binary Interfaces (ABI) ที่รองรับ วันที่วางจำหน่าย และอุปกรณ์นั้นเป็นอุปกรณ์จริงหรือเสมือน

  • versions list : รับรายการเวอร์ชันของระบบปฏิบัติการที่มีอยู่ในปัจจุบันเพื่อทดสอบ

    gcloud firebase test android versions list
    

    คุณสามารถใช้ตัวระบุจากสองคอลัมน์แรกของเอาต์พุตคำสั่ง ( OS_VERSION_ID และ VERSION ) เพื่อเรียกใช้การทดสอบกับเวอร์ชันของระบบปฏิบัติการ Android ในภายหลัง หากคุณไม่ระบุเวอร์ชันของระบบปฏิบัติการ Android ที่จะทดสอบ ระบบจะใช้ค่าเริ่มต้นที่ระบุไว้ในคอลัมน์ TAGS

    ตัวอย่างเอาต์พุต

    gcloud android versions list

  • locales list : รับรายการโลแคลปัจจุบันที่มีให้ทดสอบ

    gcloud firebase test android versions list
    

    คอลัมน์แรกของเอาต์พุตคำสั่ง LOCALE มีตัวระบุที่คุณสามารถใช้ในภายหลังเพื่อรันการทดสอบกับโลแคล หากคุณไม่ระบุภาษาที่จะทดสอบ ภาษาอังกฤษจะถูกใช้เป็นภาษาเริ่มต้น

ขั้นตอนที่ 3 เรียกใช้การทดสอบของคุณ

ตอนนี้คุณทราบช่วงของรุ่นอุปกรณ์ ตำแหน่งที่ตั้ง และเวอร์ชันระบบปฏิบัติการที่พร้อมสำหรับการทดสอบแอปของคุณแล้ว คุณสามารถระบุอุปกรณ์โดยใช้คำสั่งเรียกใช้ gcloud firebase test android run และแฟล็ก --device เพื่อเรียกใช้การทดสอบ Robo หรือเครื่องมือวัด

เรียกใช้การทดสอบ Robo

แม้ว่าคุณจะไม่มีการทดสอบเครื่องมือ แต่คุณก็ยังสามารถมองหาจุดบกพร่องในแอปของคุณได้ ใช้การทดสอบ Robo เพื่อทำการตรวจสอบอินเทอร์เฟซผู้ใช้ของแอปโดยอัตโนมัติ การทดสอบ Robo ทดสอบแอปโดยทำการวิเคราะห์แบบคงที่ของเส้นทางต่างๆ ผ่านอินเทอร์เฟซผู้ใช้ของแอป จากนั้นรวบรวมข้อมูลผ่านแอปเพื่อค้นหาข้อขัดข้องและปัญหาอื่นๆ ที่อาจเกิดขึ้น

ในการรันการทดสอบ 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 v1.1 หรือสูงกว่า หากต้องการเปิดใช้งาน ให้ใช้ gcloud firebase test android run ด้วย
--use-orchestrator ธง หากต้องการปิดใช้งานให้ใช้แฟล็ก --no-use-orchestrator

คุณยังสามารถควบคุมวิธีที่ Test Lab ทำการทดสอบเครื่องมือของคุณโดยใช้แฟล็กเพิ่มเติมที่ไม่ได้แสดงไว้ด้านบน ตัวอย่างเช่น คุณสามารถใช้แฟล็ก --test-targets เพื่อทดสอบคลาสเดียวหรือเมธอดของคลาสที่ใช้โดย APK ทดสอบของคุณ คุณยังสามารถทราบได้ว่าการทดสอบของคุณที่ล้มเหลวนั้นล้มเหลวจริงหรือไม่โดยใช้แฟล็ก --num-flaky-test-attempts ซึ่งจะระบุจำนวนครั้งที่การดำเนินการทดสอบควรได้รับการพยายามใหม่หากกรณีทดสอบอย่างน้อยหนึ่งกรณี ล้มเหลวด้วยเหตุผลใดก็ตาม หากต้องการเรียนรู้เพิ่มเติม โปรดดู 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:

  1. เปิดลิงก์คอนโซล Firebase ที่เครื่องมือ gcloud พิมพ์เหนือตารางผลการทดสอบในเทอร์มินัล
  2. คลิกการทดสอบการดำเนินการจากรายการที่ลิงก์นั้นเพื่อเปิดหน้ารายละเอียดของการดำเนินการนั้น
  3. คลิก ผลการทดสอบ เพื่อไปที่บัคเก็ต Cloud Storage ที่มีผลการทดสอบการดำเนินการนั้น
  4. เปิด artifacts/coverage.ec เพื่อดูรายงานการครอบคลุมรหัสของคุณ

วิเคราะห์ผลการทดสอบของคุณ

หลังจากนั้นไม่กี่นาที ข้อมูลสรุปเบื้องต้นของผลการทดสอบของคุณจะถูกพิมพ์โดยเครื่องมือ gcloud:

Command test results

ผลลัพธ์ของการเรียกใช้การทดสอบบรรทัดคำสั่งของคุณยังมีลิงก์เพื่อดูผลการทดสอบ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีตีความผลลัพธ์เหล่านี้ โปรดดู ที่การวิเคราะห์ผลลัพธ์ Firebase Test Lab สำหรับ Android

การเข้าสู่ระบบที่กำหนดเองและการป้อนข้อความด้วยการทดสอบ Robo

การทดสอบ Robo จะเสร็จสิ้นการลงชื่อเข้าใช้หน้าจอที่ใช้บัญชี Google สำหรับการตรวจสอบสิทธิ์โดยอัตโนมัติ เว้นแต่คุณจะใช้พารามิเตอร์ --no-auto-google-login นอกจากนี้ยังสามารถกรอกหน้าจอการเข้าสู่ระบบที่กำหนดเองโดยใช้ข้อมูลรับรองบัญชีทดสอบที่คุณระบุ คุณยังสามารถใช้พารามิเตอร์นี้เพื่อระบุข้อความป้อนแบบกำหนดเองสำหรับช่องข้อความอื่นๆ ที่แอปของคุณใช้

ในการกรอกช่องข้อความในแอปของคุณ ให้ใช้พารามิเตอร์ --robo-directives และระบุรายการคู่ key-value ที่คั่นด้วยเครื่องหมายจุลภาค โดยที่ key คือชื่อทรัพยากร Android ขององค์ประกอบ UI เป้าหมาย และ value คือสตริงข้อความ . คุณยังสามารถใช้แฟล็กนี้เพื่อบอก Robo ให้ละเว้นองค์ประกอบ UI เฉพาะ (เช่น ปุ่ม "ออกจากระบบ") รองรับช่อง EditText แต่ไม่รองรับช่องข้อความในองค์ประกอบ WebView UI

ตัวอย่างเช่น คุณสามารถใช้พารามิเตอร์ต่อไปนี้สำหรับการเข้าสู่ระบบที่กำหนดเอง:

--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 (ในรุ่นเบต้า) : แฟล็กที่ระบุจำนวนของชาร์ดที่คุณต้องการกระจายกรณีทดสอบเท่าๆ กัน เศษจะทำงานแบบขนานบนอุปกรณ์ที่แยกจากกัน

  • แฟล็ก Sharding แบบแมนนวล (ในรุ่นเบต้า) : แฟล็กที่ระบุกลุ่มของแพ็กเกจ คลาส และ/หรือกรณีทดสอบที่จะรันในชาร์ด (กลุ่มของกรณีทดสอบ) เศษจะทำงานแบบขนานบนอุปกรณ์ที่แยกจากกัน

  • ค่าสถานะโปรไฟล์การรับส่งข้อมูลเครือข่าย (ในรุ่นเบต้า) : ค่าสถานะที่ระบุโปรไฟล์เครือข่ายใดที่การทดสอบของคุณใช้กับอุปกรณ์จริง โปรไฟล์เครือข่ายจำลองเงื่อนไขเครือข่ายที่หลากหลาย ทำให้คุณสามารถทดสอบประสิทธิภาพของแอปบนเครือข่ายที่ไม่น่าเชื่อถือหรือคาดเดาไม่ได้

การเขียนสคริปต์คำสั่ง gcloud ด้วย Test Lab

คุณสามารถใช้เชลล์สคริปต์หรือแบตช์ไฟล์เพื่อทำให้คำสั่งการทดสอบแอปบนอุปกรณ์เคลื่อนที่เป็นแบบอัตโนมัติ ซึ่งคุณอาจเรียกใช้โดยใช้บรรทัดคำสั่ง gcloud สคริปต์ทุบตีตัวอย่างต่อไปนี้เรียกใช้การทดสอบเครื่องมือโดยหมดเวลาสองนาที และรายงานว่าการทดสอบดำเนินการเสร็จสมบูรณ์หรือไม่:

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 กรณีทดสอบอย่างน้อยหนึ่งกรณี (คลาสที่ทดสอบหรือเมธอดของคลาส) ภายในการดำเนินการทดสอบไม่ผ่าน
15 Firebase Test Lab ไม่สามารถระบุได้ว่าเมทริกซ์ทดสอบผ่านหรือไม่ผ่าน เนื่องจากเกิดข้อผิดพลาดที่ไม่คาดคิด
18 ไม่สนับสนุนสภาพแวดล้อมการทดสอบสำหรับการดำเนินการทดสอบนี้เนื่องจากขนาดการทดสอบที่เข้ากันไม่ได้ ข้อผิดพลาดนี้อาจเกิดขึ้นหากระดับ Android API ที่เลือกไม่รองรับโดยประเภทอุปกรณ์ที่เลือก
19 เมทริกซ์ทดสอบถูกยกเลิกโดยผู้ใช้
20 เกิดข้อผิดพลาดในการทดสอบโครงสร้างพื้นฐาน