การทดสอบการใช้เครื่องมือ

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

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

หัวข้อสำคัญ

  • คุณต้องประกาศเครื่องมือวัดผลในแพ็กเกจแอปพลิเคชัน โดยมีแท็ก <instrumentation> ฝังอยู่ใต้แท็ก <manifest> ของไฟล์ Manifest ของแพ็กเกจแอปพลิเคชัน
  • ไฟล์ Manifest ของแพ็กเกจแอปพลิเคชันอาจมีแท็ก <instrumentation> หลายรายการในทางเทคนิค แต่โดยทั่วไปแล้วไม่ได้ใช้รูปแบบนี้
  • <instrumentation> แต่ละรายการต้องมีข้อมูลต่อไปนี้
    • แอตทริบิวต์ android:name: ควรเป็นชื่อของคลาสย่อยของ Instrumentation ที่รวมอยู่ในแอปพลิเคชันทดสอบ ซึ่งโดยปกติจะเป็น TestRunner ที่ใช้อยู่ เช่น 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. ทำการทดสอบ

    • วิธีแก้ไขที่ง่ายที่สุดคือการใช้ ล่าสุด ดังนี้

      atest FrameworksCoreTests
      
    • หรือสำหรับการทดสอบที่ซับซ้อนมากขึ้น ให้ใช้ Trade Federation test Harness

    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 ทดสอบอาจเป็นการทดสอบฟังก์ชันการทำงานหรือการทดสอบเมตริก แต่ปัจจุบันระบบยังไม่รองรับการผสมผสานทั้ง 2 อย่าง