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