เริ่มการทดสอบด้วย 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

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

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

    gcloud android versions list

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

    gcloud firebase test android versions 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 เพื่อดูรายงานความครอบคลุมของโค้ด

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

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

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

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

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

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

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

    ด้วย

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