คู่มือนี้อธิบายวิธีเตรียมความพร้อมและเรียกใช้การทดสอบการใช้เครื่องมือโดยใช้ 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 รายการต่อกลุ่ม ขึ้นอยู่กับระยะเวลาที่เฟรมทดสอบแต่ละรายการใช้เวลาในการเรียกใช้
อ่านข้อมูลเพิ่มเติมเกี่ยวกับการเรียกเก็บเงินได้ที่หัวข้อการใช้งาน โควต้า และการเรียกเก็บเงิน