เริ่มการทดสอบด้วย 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 คือรหัสโปรเจ็กต์ 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 Interface (ABI) ที่รองรับ วันที่เผยแพร่ และข้อมูลว่าอุปกรณ์เป็นอุปกรณ์จริงหรือเสมือนจริง

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

    gcloud firebase test android versions list

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

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

    gcloud android versions list

  • locales list: ดูรายการภาษาปัจจุบันที่ใช้ทดสอบได้

    gcloud firebase test android versions list

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

ขั้นตอนที่ 3 ทำการทดสอบ

เมื่อทราบช่วงรุ่นอุปกรณ์ ภาษา และเวอร์ชันระบบปฏิบัติการที่ใช้ทดสอบแอปได้แล้ว คุณสามารถระบุอุปกรณ์โดยใช้คำสั่ง gcloud firebase test android run และ Flag --device เพื่อเรียกใช้การทดสอบ 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
  • คุณสามารถใช้ Flag --client-details matrixLabel="Example matrix label" (ไม่บังคับ) เพื่อติดป้ายกำกับเมทริกซ์การทดสอบเพื่อช่วยในการระบุและค้นหาเมทริกซ์การทดสอบในคอนโซล Firebase
  • คุณดูตัวเลือกบรรทัดคำสั่งทั้งหมดสําหรับการเรียกใช้การทดสอบได้โดยพิมพ์ 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
  • คุณสามารถใช้แฟล็ก --client-details matrixLabel="Example matrix label" (ไม่บังคับ) เพื่อติดป้ายกำกับเมทริกซ์การทดสอบเพื่อช่วยในการระบุและค้นหาเมทริกซ์การทดสอบในFirebaseคอนโซล
  • คุณดูชุดตัวเลือกบรรทัดคำสั่งทั้งหมดสําหรับการเรียกใช้การทดสอบได้โดยพิมพ์ 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 หากต้องการปิดใช้ ให้ใช้ Flag --no-use-orchestrator

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

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 เพื่อดูรายงานการครอบคลุมโค้ด

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

หลังจากผ่านไป 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 หลายรายการที่ช่วยให้คุณทำการทดสอบตามข้อกำหนดต่างๆ ได้ ดังนี้

  • Flag ของ Android Test Orchestrator: Flag เพื่อเปิดใช้ Orchestrator ซึ่งเป็นเครื่องมือที่ช่วยให้คุณทำการทดสอบแอปแต่ละรายการในการเรียกใช้ Instrumentation ของตนเองได้ Test Lab ทำงานด้วย Orchestrator เวอร์ชันล่าสุดเสมอ

  • Flag การทดสอบ Game Loop: กลุ่ม Flag การกําหนดค่าที่เปิดใช้และควบคุม "โหมดสาธิต" เพื่อจําลองการดําเนินการของผู้เล่นในแอปเกม ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้การทดสอบ Game Loop ด้วย Test Lab

  • Flag การแยกกลุ่มแบบสัดส่วนเท่าๆ กัน (เบต้า): Flag ที่ระบุจํานวนชาร์ดที่คุณต้องการกระจายกรณีทดสอบอย่างเท่าๆ กัน ชาร์ดจะทํางานพร้อมกันในอุปกรณ์แยกต่างหาก

    ด้วย

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

  • 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 เกิดข้อผิดพลาดเกี่ยวกับโครงสร้างพื้นฐานการทดสอบ