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

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

    gcloud firebase test android versions list

    คุณสามารถใช้ตัวระบุจาก 2 คอลัมน์แรกของเอาต์พุตคำสั่ง (OS_VERSION_ID และ VERSION) เพื่อเรียกใช้การทดสอบกับ Android OS เวอร์ชันใดเวอร์ชันหนึ่งในภายหลัง หากไม่ได้ระบุเวอร์ชันระบบปฏิบัติการ 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
  • หากต้องการช่วยคุณระบุและค้นหาเมทริกซ์ทดสอบใน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 กับ Flag
--use-orchestrator หากต้องการปิดใช้ ให้ใช้แฟล็ก --no-use-orchestrator

นอกจากนี้ คุณยังควบคุมวิธีที่ Test Lab เรียกใช้การทดสอบเครื่องมือ โดยใช้ Flag เพิ่มเติมที่ไม่ได้แสดงไว้ข้างต้นได้ด้วย เช่น คุณสามารถใช้แฟล็ก --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 คือ สตริงข้อความ นอกจากนี้ คุณยังใช้ Flag นี้เพื่อบอกให้ Robo ไม่สนใจองค์ประกอบ UI ที่เฉพาะเจาะจง (เช่น ปุ่ม "ออกจากระบบ") ได้ด้วย EditText รองรับฟิลด์ แต่ไม่รองรับฟิลด์ข้อความในองค์ประกอบ UI ของ WebView

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

--robo-directives username_resource=username,password_resource=password

คำสั่งและ Flag ที่ใช้ได้

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

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

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

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

    ด้วย

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

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

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