Check out what’s new from Firebase at Google I/O 2022. Learn more

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

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

  • ใช้ 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

ประโยชน์และข้อเสีย

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

เปิดใช้งานการแบ่งกลุ่ม

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

การแบ่งกลุ่มทดสอบทำงานอย่างไร

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

คุณสามารถเปิดใช้งานการทดสอบชาร์ดในคอนโซล Firebase:

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

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

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

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

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