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

  • 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

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

    รายการเวอร์ชัน Android ของ gcloud

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

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

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

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

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

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

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

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

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

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