คู่มือนี้จะอธิบายวิธีเตรียมและเรียกใช้การทดสอบเครื่องมือวัดโดยใช้ Firebase Test Lab หากต้องการใช้คู่มือนี้ คุณจะต้องมีการทดสอบอินสตรูเมนต์ (เขียนโดยคุณหรือทีมของคุณ) ที่ใช้เฟรมเวิร์กการทดสอบ Android ของ Espresso หรือ UI Automator การทดสอบเครื่องมือวัดจะทํางานได้สูงสุด 45 นาทีในอุปกรณ์จริง และสูงสุด 60 นาทีในอุปกรณ์เสมือน
ในขั้นตอนต่อๆ ไป คุณจะอัปโหลด APK ของแอปและ APK ของการทดสอบไปยัง Firebase
(ไม่บังคับ) เพิ่มคลังภาพหน้าจอลงในแอป
Firebase Test Lab มีไลบรารี (testlab-instr-lib) ที่คุณสามารถใช้เพื่อประมวลผลภาพหน้าจอที่ถ่ายด้วย ScreenCapture ของ AndroidX เมื่อทำการทดสอบด้วยเครื่องมือวัดผล เช่น การทดสอบที่เขียนโดยใช้เฟรมเวิร์กการทดสอบ Espresso
ส่วนนี้จะอธิบายวิธีสร้างออบเจ็กต์ ScreenCapture
ด้วยไลบรารี AndroidX และวิธีประมวลผลโดยใช้ testlab-instr-lib
หลังจากการทดสอบเครื่องมือวัดผลทํางานแล้ว คุณสามารถดูภาพหน้าจอที่บันทึกไว้ได้ในคอนโซล Firebase
ลองใช้แอปตัวอย่าง
ดาวน์โหลดแอปตัวอย่าง NotePad เพื่อลองใช้ฟังก์ชันนี้ ความสามารถในการจับภาพหน้าจอรวมอยู่ในโปรเจ็กต์ NotePad แล้ว
ขั้นตอนที่ 1 เพิ่มคลังภาพหน้าจอลงในโปรเจ็กต์
ในไฟล์ Gradle การตั้งค่าระดับรูทของโปรเจ็กต์ทดสอบ (
settings.gradle.kts
หรือsettings.gradle
) ให้เพิ่มที่เก็บ Maven ของ Google ลงในส่วนrepositories
ทั้งหมด ดังนี้pluginManagement { repositories { // Add the following line: google() // Google's Maven repository mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { // Add the following line: google() // Google's Maven repository mavenCentral() } } // ...
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็นไฟล์
<project>/<app-module>/build.gradle.kts
หรือ<project>/<app-module>/build.gradle
) ให้เพิ่มทรัพยากร Dependency สำหรับคลังภาพหน้าจอ 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
ผ่าน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 เครื่องสําหรับอุปกรณ์แต่ละเครื่องที่คุณเลือก และเรียกใช้ชุดย่อยของการทดสอบในอุปกรณ์แต่ละเครื่อง ซึ่งหมายความว่าเฟรมเวิร์กการทดสอบที่แบ่งกลุ่มอาจทําให้เกิดการเรียกใช้การทดสอบหลายครั้งต่ออุปกรณ์ อย่างไรก็ตาม กรอบการทดสอบที่ไม่ได้แบ่งกลุ่มจะส่งผลให้มีการดำเนินการทดสอบ 1 ครั้งต่ออุปกรณ์ หากต้องการดูแนวคิด Test Lab โปรดดูแนวคิดหลัก
หากต้องการเปิดใช้การแยกข้อมูลทดสอบในคอนโซล Firebase ให้ทำตามขั้นตอนต่อไปนี้
ในการตั้งค่าการทดสอบเครื่องมือวัด ให้คลิกตัวเลือกเพิ่มเติม
ในส่วนการแยกกลุ่ม ให้ป้อนจำนวนกลุ่มที่ต้องการเรียกใช้
การเรียกเก็บเงินสำหรับกลุ่มทดสอบ
Test Lab ใช้กลุ่มย่อยโดยใช้ประโยชน์จากกลไกการแยกกลุ่มย่อยในตัวของ AndroidJUnitRunner หากต้องการหลีกเลี่ยงการเรียกเก็บเงินสำหรับการสร้างชาร์ดว่าง (ชาร์ดที่ไม่มีกรอบการทดสอบที่กำหนด) จำนวนชาร์ดที่คุณสร้างขึ้นควรน้อยกว่าจำนวนกรอบการทดสอบทั้งหมด โดยปกติแล้ว คุณควรกำหนดเฟรมทดสอบ 2-10 รายการต่อกลุ่มย่อย ทั้งนี้ขึ้นอยู่กับระยะเวลาที่เฟรมทดสอบแต่ละรายการใช้เวลาในการเรียกใช้
อ่านข้อมูลเพิ่มเติมเกี่ยวกับการเรียกเก็บเงินได้ที่หัวข้อการใช้งาน โควต้า และการเรียกเก็บเงิน