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

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

  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()
        }
    }
    // ...
  2. ในไฟล์ 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")
      // ...
  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จะเรียกใช้แต่ละ Shard แบบขนานโดยอัตโนมัติ โดยใช้อุปกรณ์หลายเครื่อง และทำการทดสอบทั้งชุดเสร็จสมบูรณ์ในเวลาที่น้อยลง

ตัวอย่างเช่น หากคุณสร้าง N Shard สำหรับอุปกรณ์แต่ละเครื่องที่เลือก Test Lab จะเปิดอุปกรณ์ที่เหมือนกัน N เครื่องและเรียกใช้ชุดย่อยของการทดสอบในแต่ละอุปกรณ์ ซึ่งหมายความว่า กรณีทดสอบที่แยกส่วนอาจทำให้มีการทดสอบหลายครั้งต่ออุปกรณ์ 1 เครื่อง อย่างไรก็ตาม กรอบการทดสอบที่ไม่ได้แยกส่วนจะส่งผลให้มีการดำเนินการทดสอบ 1 รายการต่ออุปกรณ์ 1 เครื่อง ดูTest Labแนวคิดได้ที่แนวคิดหลัก

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

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

  2. ในส่วนการแบ่งข้อมูล ให้ป้อนจำนวน Shard ที่ต้องการเรียกใช้

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

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

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