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

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

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

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

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

  2. ในคอนโซลFirebase ให้ไปที่DevOps และการมีส่วนร่วม > Test Lab แล้วอัปโหลดไฟล์ APK

  3. สุดท้าย ให้เรียกใช้การทดสอบ

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

หลังจากที่การทดสอบเสร็จสมบูรณ์แล้ว คุณจะดูภาพหน้าจอที่ถ่ายไว้ได้โดยทำดังนี้

  1. ในคอนโซล Firebase ให้ไปที่ DevOps และการมีส่วนร่วม > Test Lab

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

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

(ไม่บังคับ) เปิดใช้ฟีเจอร์การทดสอบเพิ่มเติม

คุณสามารถเปิดใช้ฟีเจอร์ต่อไปนี้ในการทดสอบก่อนที่จะเรียกใช้ด้วย Test Lab

เปิดใช้ Orchestrator

Android Test Orchestrator เป็นเครื่องมือที่เรียกใช้การทดสอบ Instrumentation ของแอปแต่ละรายการแยกกัน Test Lab จะใช้ Orchestrator เวอร์ชันล่าสุดเสมอ

หากต้องการเปิดใช้ Orchestrator สำหรับ Test Lab ในการตั้งค่าการทดสอบการวัดคุม ให้คลิก ตัวเลือกเพิ่มเติม > เรียกใช้ด้วย Orchestrator

เมื่อใช้ Orchestrator คุณจะได้รับประโยชน์ดังนี้

  • ไม่มีสถานะที่แชร์ การทดสอบแต่ละรายการจะทำงานในอินสแตนซ์ Instrumentation ของตัวเอง ดังนั้นสถานะที่แชร์จึงไม่สะสมในการทดสอบ
  • ข้อขัดข้องที่แยกกัน หากการทดสอบขัดข้อง ระบบจะยกเลิกเฉพาะ Instrumentation นั้น และการทดสอบอื่นๆ ในชุดการทดสอบยังคงทำงานได้

โปรดทราบว่าเมื่อใช้ Orchestrator การทดสอบแต่ละรายการจะทำงานในอินสแตนซ์ Instrumentation ของตัวเอง ซึ่งหมายความว่าระบบจะรีสตาร์ทกระบวนการของแอปหลังจากกรอบการทดสอบแต่ละรายการ เวลาในการเรียกใช้ที่เพิ่มขึ้นอาจส่งผลต่อการใช้ โควต้าหรือเวลาที่เรียกเก็บเงิน และอาจ ทำให้คุณเกินขีดจำกัดการหมดเวลาของอุปกรณ์ หากคุณลดเวลาเริ่มต้นของแอป ค่าใช้จ่ายนี้ก็จะลดลง

หากต้องการตั้งค่าตัวเลือกเพิ่มเติมสำหรับ Orchestrator ให้ระบุตัวเลือกผ่านช่อง environmentVariables field เช่น หากต้องการใช้ clearPackageData ให้ใช้ตัวเลือกนี้ใน gcloud

--environment-variables clearPackageData=true

เปิดใช้การแบ่งพาร์ติชัน

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

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

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

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

  2. ในส่วนการแบ่งพาร์ติชัน ให้ป้อนจำนวนพาร์ติชันที่ต้องการเรียกใช้

การเรียกเก็บเงินสำหรับการทดสอบพาร์ติชัน

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

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