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

ขั้นแรกให้อ่าน ทดสอบแอปของคุณ บน developer.android.com โปรดทราบว่ามีความแตกต่างบางประการในการใช้การทดสอบเครื่องมือวัดในการทดสอบแพลตฟอร์ม

โดยสรุป การทดสอบเครื่องมือจัดเตรียมสภาพแวดล้อมการดำเนินการทดสอบพิเศษตามที่เปิดใช้งานผ่านคำสั่ง am instrument โดยที่กระบวนการของแอปพลิเคชันเป้าหมายจะเริ่มต้นใหม่และเริ่มต้นด้วยบริบทแอปพลิเคชันพื้นฐาน และเธรดเครื่องมือจะเริ่มต้นภายใน VM ของกระบวนการแอปพลิเคชัน รหัสทดสอบของคุณเริ่มดำเนินการบนเธรดเครื่องมือนี้ และมาพร้อมกับอินสแตนซ์ของ Instrumentation ที่ให้การเข้าถึงบริบทของแอปพลิเคชันและ API เพื่อจัดการกระบวนการแอปพลิเคชันภายใต้การทดสอบ

แนวคิดหลัก

  • ต้องประกาศเครื่องมือวัดในแพ็คเกจแอปพลิเคชัน โดยมีแท็ก <instrumentation> ซ้อนอยู่ใต้แท็ก <manifest> ของรายการแพ็คเกจแอปพลิเคชัน
  • รายการแพ็คเกจแอปพลิเคชันในทางเทคนิคอาจมีแท็ก <instrumentation> หลายแท็ก แม้ว่าโดยทั่วไปจะไม่ใช้ในลักษณะนี้
  • แต่ละ <instrumentation> ต้องมี:
    • แอตทริบิวต์ android:name : ควรเป็นชื่อของคลาสย่อยของ Instrumentation ที่รวมอยู่ในแอปพลิเคชันการทดสอบ ซึ่งโดยทั่วไปจะเป็นตัวดำเนินการทดสอบที่กำลังใช้งาน เช่น android.support.test.runner.AndroidJUnitRunner
    • ต้องกำหนดแอตทริบิวต์ android:targetPackage ควรตั้งค่าเป็นแพ็คเกจแอปพลิเคชันภายใต้การทดสอบ

สรุปขั้นตอน

  1. ด้านล่างนี้คือปลายทางทั่วไปสำหรับการทดสอบอย่างแน่นหนากับบริการเฟรมเวิร์ก:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    หากคุณกำลังเพิ่มโมดูลเครื่องมือวัดใหม่สำหรับส่วนประกอบของคุณ โปรดดูที่

  2. ทำตามแบบแผนที่มีอยู่ หากคุณกำลังเพิ่มการทดสอบในตำแหน่งใดตำแหน่งหนึ่งข้างต้น หากคุณกำลังตั้งค่าโมดูลทดสอบใหม่ โปรดปฏิบัติตามการตั้งค่า AndroidManifest.xml และ Android.mk ในตำแหน่งใดตำแหน่งหนึ่งด้านบน

  3. ดูตัวอย่าง frameworks/base/core/tests/coretests/ หมายเหตุบรรทัดเหล่านี้ติดตั้งแอปพิเศษ:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. อย่าลืมทำเครื่องหมายการทดสอบของคุณเป็น @SmallTest , @MediumTest หรือ @LargeTest

  5. สร้างโมดูลทดสอบด้วย m เช่น:

    m FrameworksCoreTests
    
  6. ทำการทดสอบ:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. หากไม่ได้ใช้ Tradefed ให้ติดตั้งและรันการทดสอบด้วยตนเอง:

    1. ติดตั้ง apk ที่สร้างขึ้น:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    

    เคล็ดลับ: คุณใช้ adb shell pm list instrumentation เพื่อค้นหาเครื่องมือภายใน apk ที่เพิ่งติดตั้ง

    1. ทำการทดสอบด้วยตัวเลือกต่างๆ:

      1. การทดสอบทั้งหมดใน apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. การทดสอบทั้งหมดภายใต้แพ็คเกจ Java เฉพาะ

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. การทดสอบทั้งหมดภายใต้ชั้นเรียนที่เฉพาะเจาะจง

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. วิธีการทดสอบเฉพาะ

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

การทดสอบของคุณสามารถยืนยันอย่างชัดเจนว่าผ่านหรือล้มเหลวโดยใช้ JUnit API นอกจากนี้ ข้อยกเว้นที่ไม่ถูกตรวจจับจะทำให้การทำงานล้มเหลวด้วย

หากต้องการปล่อยตัววัดประสิทธิภาพ โค้ดทดสอบของคุณสามารถเรียก Instrumentation#sendStatus เพื่อส่งรายการคู่คีย์-ค่า สิ่งสำคัญคือต้องสังเกตว่า:

  1. ตัวชี้วัดสามารถเป็นจำนวนเต็มหรือจุดลอยตัว
  2. ค่าที่ไม่ใช่ตัวเลขจะถูกละทิ้ง
  3. apk ทดสอบของคุณสามารถเป็นการทดสอบการใช้งานหรือการทดสอบเมตริก อย่างไรก็ตาม ขณะนี้ยังไม่รองรับการผสมทั้งสองอย่าง