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

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

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

หัวข้อสำคัญ

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

    • โซลูชันที่ง่ายที่สุดคือการใช้ Atest ดังนี้

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

    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 อย่างในขณะนี้