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

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

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

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

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

การเรียกเก็บเงินสำหรับกลุ่มทดสอบ

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

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