โปรดอ่านทดสอบแอป ใน developer.android.com ก่อน โปรดทราบว่าการใช้การทดสอบเครื่องมือในการทดสอบแพลตฟอร์มนั้นแตกต่างกันอยู่บ้าง
กล่าวโดยสรุปคือ การทดสอบเครื่องมือจะให้สภาพแวดล้อมการดำเนินการทดสอบพิเศษ
เมื่อเปิดใช้ผ่านคำสั่ง am instrument
โดยระบบจะรีสตาร์ทและเริ่มต้นกระบวนการแอปพลิเคชันเป้าหมาย
ด้วยบริบทแอปพลิเคชันพื้นฐาน
และจะเริ่มเธรดเครื่องมือภายใน VM ของกระบวนการแอปพลิเคชัน โค้ดทดสอบจะเริ่มดำเนินการในเธรดการตรวจสอบนี้และได้รับอินสแตนซ์ Instrumentation
ซึ่งให้สิทธิ์เข้าถึงบริบทของแอปพลิเคชันและ API เพื่อจัดการกระบวนการของแอปพลิเคชันที่อยู่ระหว่างทดสอบ
หัวข้อสำคัญ
- ต้องประกาศเครื่องมือในแพ็กเกจแอปพลิเคชัน โดยมีแท็ก
<instrumentation>
ซ้อนอยู่ภายใต้แท็ก<manifest>
ของไฟล์ Manifest ของแพ็กเกจแอปพลิเคชัน - ไฟล์ Manifest ของแพ็กเกจแอปพลิเคชันอาจมีแท็ก
<instrumentation>
หลายแท็กในทางเทคนิค แต่โดยทั่วไปแล้วจะไม่ใช้ในลักษณะนี้ <instrumentation>
แต่ละรายการต้องมีข้อมูลต่อไปนี้- แอตทริบิวต์
android:name
: ควรเป็นชื่อของคลาสย่อยของInstrumentation
ที่รวมอยู่ในแอปพลิเคชันทดสอบ ซึ่งโดยปกติแล้วจะเป็นโปรแกรมเรียกใช้การทดสอบที่ใช้ เช่นandroid.support.test.runner.AndroidJUnitRunner
- ต้องกำหนดแอตทริบิวต์
android:targetPackage
ค่าควร ตั้งเป็นแพ็กเกจแอปพลิเคชันภายใต้การทดสอบ
- แอตทริบิวต์
สรุปขั้นตอน
ด้านล่างนี้คือปลายทางที่พบบ่อยสำหรับการทดสอบแบบปิดกับบริการของเฟรมเวิร์ก
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
หากคุณกำลังเพิ่มโมดูลการวัดผลใหม่สำหรับคอมโพเนนต์ โปรดดู
ทำตามรูปแบบที่มีอยู่หากคุณเพิ่มการทดสอบลงในตำแหน่งใดตำแหน่งหนึ่งด้านบน หากคุณกำลังตั้งค่าโมดูลการทดสอบใหม่ โปรดทำตาม การตั้งค่า
AndroidManifest.xml
และAndroid.mk
ในตำแหน่งใดตำแหน่งหนึ่ง ด้านบนดูตัวอย่างได้ที่ frameworks/base/core/tests/coretests/ โปรดทราบว่าบรรทัดต่อไปนี้จะติดตั้งแอปเพิ่มเติม
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
อย่าลืมทำเครื่องหมายการทดสอบเป็น
@SmallTest
,@MediumTest
หรือ@LargeTest
สร้างโมดูลทดสอบด้วย m เช่น
m FrameworksCoreTests
ทำการทดสอบ
โซลูชันที่ง่ายที่สุดคือการใช้ Atest ดังนี้
atest FrameworksCoreTests
หรือหากต้องการทดสอบที่ซับซ้อนมากขึ้น ให้ใช้ ชุดทดสอบ Trade Federation
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
หากไม่ได้ใช้ Tradefed ให้ติดตั้งและเรียกใช้การทดสอบด้วยตนเองดังนี้
- ติดตั้ง APK ที่สร้างขึ้น
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
ทําการทดสอบด้วยตัวเลือกต่างๆ ดังนี้
การทดสอบทั้งหมดใน APK
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
การทดสอบทั้งหมดภายใต้แพ็กเกจ Java ที่เฉพาะเจาะจง
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
การทดสอบทั้งหมดภายใต้ชั้นเรียนที่เฉพาะเจาะจง
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
วิธีการทดสอบที่เฉพาะเจาะจง
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
การทดสอบสามารถยืนยันอย่างชัดเจนว่าผ่านหรือไม่ผ่านโดยใช้ JUnit
API นอกจากนี้ ข้อยกเว้นที่ไม่ได้แคชจะทำให้ฟังก์ชันการทำงานล้มเหลวด้วย
หากต้องการปล่อยเมตริกประสิทธิภาพ โค้ดทดสอบจะเรียกใช้
Instrumentation#sendStatus
เพื่อส่งรายการคู่คีย์-ค่าได้ สิ่งสำคัญที่ควรทราบมีดังนี้
- เมตริกอาจเป็นจำนวนเต็มหรือทศนิยมก็ได้
- ระบบจะทิ้งค่าที่ไม่ใช่ตัวเลข
- APK สำหรับทดสอบอาจเป็นการทดสอบฟังก์ชันการทํางานหรือการทดสอบเมตริก แต่ระบบไม่รองรับการผสมทั้ง 2 อย่างในขณะนี้