คู่มือนี้จะอธิบายวิธีเตรียมและเรียกใช้การทดสอบเครื่องมือวัดโดยใช้ 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 เครื่อง อย่างไรก็ตาม กรอบการทดสอบที่ไม่ได้แบ่งกลุ่มจะส่งผลให้มีการดำเนินการทดสอบ 1 ครั้งต่ออุปกรณ์ หากต้องการดูแนวคิด Test Lab โปรดดูแนวคิดหลัก
หากต้องการเปิดใช้ทดสอบชาร์ดดิ้งในคอนโซล Firebase ให้ทำตามขั้นตอนต่อไปนี้
ในการตั้งค่าการทดสอบเครื่องมือวัด ให้คลิกตัวเลือกเพิ่มเติม
ในส่วนชาร์ด ให้ป้อนจำนวนชาร์ดที่ต้องการเรียกใช้
การเรียกเก็บเงินสำหรับชาร์ดทดสอบ
Test Lab ใช้กลุ่มย่อยโดยใช้ประโยชน์จากกลไกการแยกกลุ่มย่อยในตัวของ AndroidJUnitRunner หากต้องการหลีกเลี่ยงการเรียกเก็บเงินสำหรับการสร้างชาร์ดว่าง (ชาร์ดที่ไม่มีกรอบการทดสอบที่กำหนด) จำนวนชาร์ดที่คุณสร้างขึ้นควรน้อยกว่าจำนวนกรอบการทดสอบทั้งหมด โดยทั่วไปคุณควรกำหนดกรอบการทดสอบ 2-10 รายการต่อชาร์ด ทั้งนี้ขึ้นอยู่กับระยะเวลาที่กรอบการทดสอบแต่ละรายการใช้
อ่านข้อมูลเพิ่มเติมเกี่ยวกับการเรียกเก็บเงินได้ที่หัวข้อการใช้งาน โควต้า และการเรียกเก็บเงิน