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

ขั้นแรกให้อ่าน ทดสอบแอปของคุณ บน 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
    
    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 ทดสอบของคุณอาจเป็นการทดสอบการทำงานหรือการทดสอบหน่วยเมตริกก็ได้ แต่ในปัจจุบันยังไม่รองรับการผสมทั้งสองอย่าง