เริ่มการทดสอบด้วย 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: ดูข้อมูลเพิ่มเติมเกี่ยวกับ 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 instrumentation จะเป็นค่าเริ่มต้นหากระบุ 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 ซึ่งระบุจำนวนครั้งที่ควรลองดำเนินการทดสอบอีกครั้งหากกรณีทดสอบอย่างน้อย 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 เพื่อดูรายงานการครอบคลุมของโค้ด

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

หลังจากผ่านไปไม่กี่นาที เครื่องมือ 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

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