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

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

    เอาต์พุตรายการโมเดล Android ของ gcloud firebase test

  • 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

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

    gcloud android versions list

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

    gcloud firebase test android locales 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
  • คุณสามารถใช้แฟล็ก --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 กับแฟล็ก
--use-orchestrator หากต้องการปิดใช้ ให้ใช้แฟล็ก --no-use-orchestrator

นอกจากนี้ คุณยังควบคุมวิธีที่ Test Lab เรียกใช้การทดสอบการวัดคุมได้โดยใช้แฟล็กเพิ่มเติมที่ไม่ได้แสดงไว้ด้านบน ตัวอย่างเช่น คุณสามารถใช้แฟล็ก --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 ดังนี้

  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 คือสตริงข้อความ นอกจากนี้ คุณยังใช้แฟล็กนี้เพื่อบอกให้ 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 เวอร์ชันล่าสุดเสมอ

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

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

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

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

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