ขั้นแรกให้อ่าน ทดสอบแอปของคุณ บน Developer.android.com โปรดทราบว่ามีความแตกต่างบางประการในวิธีใช้การทดสอบเครื่องมือในการทดสอบแพลตฟอร์ม
โดยสรุป การทดสอบเครื่องมือวัดจะจัดเตรียมสภาพแวดล้อมการดำเนินการทดสอบพิเศษตามที่เรียกใช้ผ่านคำสั่ง am instrument
โดยที่กระบวนการแอปพลิเคชันเป้าหมายจะถูกรีสตาร์ทและเตรียมใช้งานด้วยบริบทแอปพลิเคชันพื้นฐาน และเธรดเครื่องมือวัดจะเริ่มต้นภายในกระบวนการแอปพลิเคชัน VM โค้ดทดสอบของคุณเริ่มดำเนินการบนเธรดเครื่องมือวัดนี้ และมาพร้อมกับอินสแตนซ์ Instrumentation
ที่ให้การเข้าถึงบริบทของแอปพลิเคชันและ API เพื่อจัดการกระบวนการแอปพลิเคชันภายใต้การทดสอบ
แนวคิดหลัก
- เครื่องมือวัดจะต้องประกาศในแพ็คเกจแอปพลิเคชัน โดยมีแท็ก
<instrumentation>
ซ้อนอยู่ใต้แท็ก<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
หรือสำหรับการทดสอบที่ซับซ้อนมากขึ้น ให้ใช้ ชุดทดสอบของสหพันธ์การค้า :
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 ทดสอบของคุณอาจเป็นการทดสอบการทำงานหรือการทดสอบหน่วยเมตริกก็ได้ แต่ในปัจจุบันยังไม่รองรับการผสมทั้งสองอย่าง