เริ่มการทดสอบด้วย 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 ที่รองรับ อินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (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 versions list

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

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

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

นอกจากนี้ คุณยังควบคุมวิธีที่ Test Lab เรียกใช้การทดสอบเครื่องมือวัดได้ด้วยโดยใช้ Flag เพิ่มเติมที่ไม่ได้แสดงด้านบน เช่น คุณสามารถใช้แฟล็ก --test-targets เพื่อทดสอบคลาสเดียวหรือเมธอดของคลาสที่ APK การทดสอบใช้ คุณยังดูได้ว่าการทดสอบที่ล้มเหลวนั้นไม่น่าเชื่อถือจริงหรือไม่ โดยใช้แฟล็ก --num-flaky-test-attempts ซึ่งระบุจำนวนครั้งที่ควรลองดำเนินการทดสอบอีกครั้งหากกรอบการทดสอบอย่างน้อย 1 รายการล้มเหลวไม่ว่าด้วยเหตุผลใดก็ตาม ดูข้อมูลเพิ่มเติมได้ที่การเรียกใช้การทดสอบ gcloud ของ firebase สำหรับ Android

รายงานการครอบคลุมโค้ดสําหรับการทดสอบการใช้เครื่องมือ

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

คำสั่งและ Flag ที่พร้อมใช้งาน

Test Lab gcloud CLI มีคำสั่งและ Flag หลายรายการที่ช่วยให้คุณทำการทดสอบตามข้อกำหนดต่างๆ ได้ ดังนี้

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

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

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

    ด้วย

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