คู่มือนี้อธิบายวิธีเตรียมและเรียกใช้การทดสอบเครื่องมือโดยใช้ Firebase Test Lab หากต้องการใช้คู่มือนี้ คุณต้องมี การทดสอบเครื่องมือวัด (เขียนโดยคุณหรือทีมของคุณ) ที่ใช้กรอบการทดสอบ Espresso หรือ UI Automator Android การทดสอบเครื่องมือสามารถรันได้ถึง 45 นาทีบนอุปกรณ์จริง และสูงสุด 60 นาทีบน อุปกรณ์เสมือน
ในขั้นตอนต่อมา คุณจะต้องอัปโหลด APK ของแอปและ APK ของการทดสอบไปยัง Firebase
(ไม่บังคับ) เพิ่มไลบรารีภาพหน้าจอลงในแอปของคุณ
Firebase Test Lab มีไลบรารี (testlab-instr-lib) ที่คุณสามารถใช้เพื่อประมวลผลภาพหน้าจอที่คุณถ่ายด้วย ScreenCapture ของ AndroidX เมื่อเรียกใช้การทดสอบเครื่องมือ เช่น การทดสอบที่เขียนโดยใช้ เฟรมเวิร์กการทดสอบ Espresso ส่วนนี้อธิบายวิธีสร้างวัตถุ ScreenCapture
ด้วยไลบรารี AndroidX และวิธีการประมวลผลโดยใช้ testlab-instr-lib
หลังจากเรียกใช้การทดสอบเครื่องมือแล้ว คุณสามารถดูภาพหน้าจอที่บันทึกไว้ในคอนโซล Firebase
ลองใช้แอปตัวอย่าง
ดาวน์โหลด แอปตัวอย่าง NotePad เพื่อทดลองใช้ฟังก์ชันนี้ ความสามารถในการถ่ายภาพหน้าจอรวมอยู่ในโครงการ NotePad แล้ว
ขั้นตอนที่ 1 เพิ่มไลบรารีภาพหน้าจอในโครงการของคุณ
ในไฟล์ Gradle ระดับรูท (ระดับโครงการ) ของโครงการทดสอบของคุณ (
build.gradle
) ให้เพิ่มที่เก็บ Maven ของ Google ลงในส่วนที่เก็บทุกส่วน:buildscript { repositories { // Add the following line: google() // Google's Maven repository } dependencies { // ... // Check that you have the following line (if not, add it): classpath 'com.google.gms:google-services:4.3.8' // Google Services plugin } } allprojects { // ... repositories { // Add the following line: google() // Google's Maven repository // ... } }
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ
app/build.gradle
) ให้เพิ่มการอ้างอิงสำหรับไลบรารีภาพหน้าจอของ Test Labdependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2' // ... }
ในไฟล์
AndroidManifest.xml
ของการทดสอบ ให้ลงทะเบียนFirebaseScreenCaptureProcessor
ในแท็กข้อมูลเมตาภายในองค์ประกอบ<instrumentation>
คุณยังสามารถระบุตัวประมวลผลเป็นอาร์กิวเมนต์ใน AndroidJUnitRunner แทน (ดูคำแนะนำใน เอกสารอ้างอิงของ AndroidJUnitRunner )<instrumentation // Check that you have the following line (if not, add it): android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner android:targetPackage="com.your.package.name"> // Add the following: <meta-data android:name="screenCaptureProcessors" android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" /> </instrumentation> ...
ในไฟล์
AndroidManifest.xml
ของแอป ให้เพิ่มบรรทัดต่อไปนี้ภายในองค์ประกอบ<manifest>
:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
ในไฟล์
AndroidManifest.xml
ให้ระบุสิทธิ์ของระบบสำหรับแอปของคุณโดยเพิ่มบรรทัดต่อไปนี้ภายในแท็ก<manifest>
หากคุณกำลังทดสอบบน Android 10 (API ระดับ 29) หรือสูงกว่า ให้ละเว้นสิทธิ์WRITE_EXTERNAL_STORAGE
(แอปของคุณไม่ต้องการสิทธิ์นี้เพื่ออ่านและเขียนภาพหน้าจอไปยังอุปกรณ์)<manifest ... > <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
ขั้นตอนที่ 2 ถ่ายภาพหน้าจอระหว่างการทดสอบของคุณ
เมื่อใดก็ตามในการทดสอบของคุณที่คุณต้องการถ่ายภาพหน้าจอ ให้เรียกเมธอด Screenshot.capture()
จากไลบรารี AndroidX สิ่งนี้สร้าง วัตถุ ScreenCapture
เมื่อคุณเรียก process()
บนวัตถุ ScreenCapture
วัตถุนั้นจะได้รับการประมวลผลโดยใช้ ScreenCaptureProcessor ที่ลงทะเบียนใน AndroidManifest.xml
ของคุณ โปรดทราบว่าจะใช้ BasicScreenCaptureProcessor
หากไม่มีการลงทะเบียนโปรเซสเซอร์ เนื่องจากคุณลงทะเบียน FirebaseScreenCaptureProcessor
ภาพหน้าจอของคุณจะได้รับการประมวลผลผ่าน FirebaseScreenCaptureProcessor
และจะพร้อมแสดงผลลัพธ์เมื่อคุณเรียกใช้การทดสอบกับ Firebase Test Lab
ตัวอย่างการใช้งานในการสร้าง ScreenCapture
:
จับภาพหน้าจอแบบเต็มบน API Build.VERSION_CODES.JELLY_BEAN_MR2 ขึ้นไป:
Screenshot.capture()
จับ
ScreenCapture
ของกิจกรรมในระดับ API ใดก็ได้ โปรดทราบว่านี่เป็นตัวเลือกเดียวสำหรับอุปกรณ์ที่ต่ำกว่า Build.VERSION_CODES.JELLY_BEAN_MR2@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
ตัวอย่างการใช้งานสำหรับการประมวลผล ScreenCapture
ประมวลผล
ScreenCapture
ผ่านFirebaseScreenCaptureProcessor
:Screenshot.capture().process();
ประมวลผล
ScreenCapture
ผ่านScreenCaptureProcessor
ที่ระบุ (ซึ่งจะทำให้คุณสามารถข้ามการลงทะเบียนโปรเซสเซอร์ได้):Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);
ตั้งชื่อและรูปแบบของ
ScreenCapture
และประมวลผลโดยใช้ตัวประมวลผลที่ลงทะเบียน:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
ขั้นตอนที่ 3 สร้างและเรียกใช้การทดสอบของคุณ
สร้างแอปและทดสอบ APK (ดูคำแนะนำใน การทดสอบแอปของคุณ )
อัปโหลดไฟล์ APK ไปยัง แดชบอร์ด Test Lab ของคอนโซล Firebase
สุดท้าย เรียกใช้การทดสอบของคุณ
ขั้นตอนที่ 4 ดูภาพหน้าจอทดสอบของคุณ
หลังจากการทดสอบของคุณเสร็จสิ้น คุณสามารถดูภาพหน้าจอที่ถ่ายในคอนโซล Firebase
ในแท็บ การทดสอบ เลือกการทดสอบที่เสร็จสมบูรณ์ของคุณ จากนั้นคลิกแท็บ ผลลัพธ์
เลือกแบบทดสอบของคุณอีกครั้ง จากนั้นคลิกแท็บ ภาพหน้าจอ ที่ปรากฏขึ้น
(ไม่บังคับ) เปิดใช้งานคุณสมบัติการทดสอบเพิ่มเติม
คุณสามารถเปิดใช้งานคุณสมบัติต่อไปนี้ในการทดสอบของคุณก่อนที่จะรันด้วย Test Lab:
เปิดใช้งาน Orchestrator
Android Test Orchestrator เป็นเครื่องมือที่เรียกใช้การทดสอบเครื่องมือแต่ละรายการของแอปโดยแยกจากกัน Test Lab ใช้ Orchestrator เวอร์ชันล่าสุดเสมอ
ในการเปิดใช้งาน Orchestrator สำหรับ Test Lab ใน การตั้งค่าการทดสอบเครื่องมือ ให้คลิก ตัวเลือกเพิ่มเติม > เรียกใช้ด้วย Orchestrator
เมื่อคุณใช้ Orchestrator คุณจะได้รับประโยชน์จากสิ่งต่อไปนี้:
- ไม่มีสถานะที่ใช้ร่วมกัน การทดสอบแต่ละครั้งทำงานในอินสแตนซ์เครื่องมือวัดของตัวเอง ดังนั้นสถานะที่ใช้ร่วมกันจะไม่สะสมในการทดสอบ
- เกิดการขัดข้องที่แยกได้ หากการทดสอบขัดข้อง เฉพาะเครื่องมือนั้นเท่านั้นที่จะยุติ และการทดสอบอื่นๆ ในชุดของคุณยังคงสามารถทำงานได้
โปรดทราบว่าเมื่อคุณใช้ Orchestrator การทดสอบแต่ละครั้งจะเรียกใช้อินสแตนซ์เครื่องมือวัดของตัวเอง ซึ่งหมายความว่ากระบวนการของแอปจะเริ่มต้นใหม่หลังจากทุกกรณีการทดสอบ เวลาทำงานที่เพิ่มขึ้นอาจส่งผลต่อ การใช้โควต้าหรือเวลาที่เรียกเก็บเงิน และอาจทำให้คุณเกินขีดจำกัดการหมดเวลาของอุปกรณ์ หากคุณลดเวลาเริ่มต้นของแอป ค่าใช้จ่ายนี้จะสั้นลง
หากต้องการตั้งค่าตัวเลือกเพิ่มเติมสำหรับ Orchestrator ให้ระบุผ่าน ฟิลด์ environmentVariables
ตัวอย่างเช่น หากต้องการใช้ clearPackageData
ให้ใช้ตัวเลือกนี้ใน gcloud:
--environment-variables clearPackageData=true
เปิดใช้การแบ่งกลุ่ม
การแบ่งกลุ่มการทดสอบแบ่งชุดการทดสอบออกเป็นกลุ่มย่อย (กลุ่มย่อย) ที่ทำงานแยกจากกัน Test Lab เรียกใช้แต่ละชิ้นส่วนพร้อมกันโดยอัตโนมัติโดยใช้อุปกรณ์หลายเครื่อง และทำการทดสอบทั้งชุดให้เสร็จโดยใช้เวลาน้อยลง
ตัวอย่างเช่น หากคุณสร้าง N ชาร์ด สำหรับอุปกรณ์แต่ละเครื่องที่คุณเลือก Test Lab จะปั่นอุปกรณ์ที่เหมือนกัน N เครื่องและรันชุดย่อยของการทดสอบบนอุปกรณ์แต่ละเครื่อง ซึ่งหมายความว่ากรณีทดสอบที่แบ่งย่อยอาจส่งผลให้เกิดการดำเนินการทดสอบหลายรายการต่ออุปกรณ์หนึ่งเครื่อง อย่างไรก็ตาม กรณีทดสอบที่ไม่แบ่งส่วนจะส่งผลให้มีการดำเนินการทดสอบหนึ่งครั้งต่ออุปกรณ์ หากต้องการเรียนรู้แนวคิดของ Test Lab โปรดดู แนวคิดหลัก
หากต้องการเปิดใช้การแบ่งกลุ่มการทดสอบในคอนโซล Firebase ให้ทำตามขั้นตอนเหล่านี้:
ใน การตั้งค่าการทดสอบเครื่องมือ คลิก ตัวเลือกเพิ่มเติม
ในส่วน Sharding ให้ป้อนจำนวนของ Sharding ที่คุณต้องการเรียกใช้
การเรียกเก็บเงินสำหรับเศษทดสอบ
Test Lab ใช้ Shards ของคุณโดยใช้ประโยชน์จาก กลไก Sharding ในตัวของ AndroidJUnitRunner เพื่อหลีกเลี่ยงการถูกเรียกเก็บเงินสำหรับการปั่นชิ้นส่วนเปล่า (ชิ้นส่วนที่ไม่มีกรณีทดสอบที่กำหนด) จำนวนชิ้นส่วนที่คุณสร้างควรน้อยกว่าจำนวนกรณีทดสอบทั้งหมด ขึ้นอยู่กับระยะเวลาที่แต่ละกรณีทดสอบใช้ในการรัน โดยปกติแล้ว คุณควรกำหนดกรณีทดสอบ 2-10 รายการต่อชาร์ด
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเรียกเก็บเงิน โปรดอ่าน การใช้งาน โควต้า และการเรียกเก็บเงิน