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