ก่อนอื่น ให้อ่านทดสอบแอปใน 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
ค่าควรตั้งเป็นแพ็กเกจแอปพลิเคชันที่อยู่ภายใต้การทดสอบ
- แอตทริบิวต์
สรุปขั้นตอน
ด้านล่างนี้คือปลายทางทั่วไปสำหรับการทดสอบแบบปิดกับบริการเฟรมเวิร์ก
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 FrameworksCoreTests
หรือสำหรับการทดสอบที่ซับซ้อนมากขึ้น ให้ใช้ Trade Federation test Harness
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 อย่าง