Catch up on highlights from Firebase at Google I/O 2023. Learn more

เริ่มต้นกับการทดสอบเครื่องมือวัด

คู่มือนี้อธิบายวิธีเตรียมและเรียกใช้การทดสอบเครื่องมือโดยใช้ Firebase Test Lab หากต้องการใช้คู่มือนี้ คุณต้องมี การทดสอบเครื่องมือวัด (เขียนโดยคุณหรือทีมของคุณ) ที่ใช้กรอบการทดสอบ Espresso หรือ UI Automator Android การทดสอบเครื่องมือสามารถรันได้ถึง 45 นาทีบนอุปกรณ์จริง และสูงสุด 60 นาทีบน อุปกรณ์เสมือน

ในขั้นตอนต่อมา คุณจะต้องอัปโหลด APK ของแอปและ APK ของการทดสอบไปยัง Firebase

(ไม่บังคับ) เพิ่มไลบรารีภาพหน้าจอลงในแอปของคุณ

Firebase Test Lab มีไลบรารี (testlab-instr-lib) ที่คุณสามารถใช้เพื่อประมวลผลภาพหน้าจอที่คุณถ่ายด้วย ScreenCapture ของ AndroidX เมื่อเรียกใช้การทดสอบเครื่องมือ เช่น การทดสอบที่เขียนโดยใช้ เฟรมเวิร์กการทดสอบ Espresso ส่วนนี้อธิบายวิธีสร้างวัตถุ ScreenCapture ด้วยไลบรารี AndroidX และวิธีการประมวลผลโดยใช้ testlab-instr-lib

หลังจากเรียกใช้การทดสอบเครื่องมือแล้ว คุณสามารถดูภาพหน้าจอที่บันทึกไว้ในคอนโซล Firebase

ลองใช้แอปตัวอย่าง

ดาวน์โหลด แอปตัวอย่าง NotePad เพื่อทดลองใช้ฟังก์ชันนี้ ความสามารถในการถ่ายภาพหน้าจอรวมอยู่ในโครงการ NotePad แล้ว

ขั้นตอนที่ 1 เพิ่มไลบรารีภาพหน้าจอในโครงการของคุณ

  1. ในไฟล์ Gradle ระดับรูท (ระดับโครงการ) ของโครงการทดสอบของคุณ ( build.gradle ) ให้เพิ่มที่เก็บ Maven ของ Google ลงในส่วนที่เก็บทุกส่วน:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ app/build.gradle ) ให้เพิ่มการอ้างอิงสำหรับไลบรารีภาพหน้าจอของ Test Lab

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2'
      // ...
    }
  3. ในไฟล์ 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>
    ...
    
  4. ในไฟล์ AndroidManifest.xml ของแอป ให้เพิ่มบรรทัดต่อไปนี้ภายในองค์ประกอบ <manifest> :

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. ในไฟล์ 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 สร้างและเรียกใช้การทดสอบของคุณ

  1. สร้างแอปและทดสอบ APK (ดูคำแนะนำใน การทดสอบแอปของคุณ )

  2. อัปโหลดไฟล์ APK ไปยัง แดชบอร์ด Test Lab ของคอนโซล Firebase

  3. สุดท้าย เรียกใช้การทดสอบของคุณ

ขั้นตอนที่ 4 ดูภาพหน้าจอทดสอบของคุณ

หลังจากการทดสอบของคุณเสร็จสิ้น คุณสามารถดูภาพหน้าจอที่ถ่ายในคอนโซล Firebase

  1. ในแท็บ การทดสอบ เลือกการทดสอบที่เสร็จสมบูรณ์ของคุณ จากนั้นคลิกแท็บ ผลลัพธ์

  2. เลือกแบบทดสอบของคุณอีกครั้ง จากนั้นคลิกแท็บ ภาพหน้าจอ ที่ปรากฏขึ้น

(ไม่บังคับ) เปิดใช้งานคุณสมบัติการทดสอบเพิ่มเติม

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

หากต้องการเปิดใช้การแบ่งกลุ่มการทดสอบในคอนโซล Firebase ให้ทำตามขั้นตอนเหล่านี้:

  1. ใน การตั้งค่าการทดสอบเครื่องมือ คลิก ตัวเลือกเพิ่มเติม

  2. ในส่วน Sharding ให้ป้อนจำนวนของ Sharding ที่คุณต้องการเรียกใช้

การเรียกเก็บเงินสำหรับเศษทดสอบ

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเรียกเก็บเงิน โปรดอ่าน การใช้งาน โควต้า และการเรียกเก็บเงิน