โมดูลทดสอบใหม่แต่ละโมดูลต้องมีไฟล์กำหนดค่าเพื่อสั่งให้ระบบบิลด์ ด้วยข้อมูลเมตาของโมดูล การอ้างอิงในเวลาคอมไพล์ และวิธีการแพ็กเกจ ตอนนี้ Android ใช้ระบบบิลด์ Soong เพื่อให้การกำหนดค่าการทดสอบง่ายขึ้น
Soong ใช้ไฟล์ Blueprint หรือ .bp
ซึ่งเป็นคำอธิบายแบบประกาศอย่างง่ายที่คล้ายกับ JSON ของโมดูลที่จะสร้าง รูปแบบนี้จะแทนที่ระบบที่ใช้ Make
ซึ่งใช้ในรุ่นก่อนหน้า ดูรายละเอียดทั้งหมดได้ที่ไฟล์อ้างอิง Soong
ในแดชบอร์ดการผสานรวมอย่างต่อเนื่อง
หากต้องการรองรับการทดสอบที่กำหนดเองหรือใช้ Compatibility Test Suite (CTS) ของ Android ให้ทำตามการกำหนดค่าการทดสอบที่ซับซ้อนแทน
ตัวอย่าง
รายการด้านล่างมาจากไฟล์การกำหนดค่า Blueprint ตัวอย่างนี้ /platform_testing/tests/example/instrumentation/Android.bp
เราได้รวมสแนปชอตไว้ที่นี่เพื่อความสะดวก
android_test {
name: "HelloWorldTests",
srcs: ["src/**/*.java"],
sdk_version: "current",
static_libs: ["androidx.test.runner"],
certificate: "platform",
test_suites: ["device-tests"],
}
โปรดทราบว่าการประกาศ android_test
ที่จุดเริ่มต้นบ่งชี้ว่านี่เป็นการทดสอบ
การรวม android_app
จะเป็นการระบุว่านี่เป็นแพ็กเกจบิลด์แทน
การตั้งค่า
การตั้งค่าต่อไปนี้ต้องมีคำอธิบาย
name: "HelloWorldTests",
ต้องมีการตั้งค่า name
เมื่อระบุประเภทโมดูล android_test
(ที่จุดเริ่มต้นของบล็อก) ซึ่งจะตั้งชื่อให้โมดูลของคุณ และ APK ที่ได้จะตั้งชื่อเหมือนกันและมีคำต่อท้ายเป็น .apk
เช่น ในกรณีนี้
APK สำหรับทดสอบที่ได้จะชื่อ HelloWorldTests.apk
นอกจากนี้ ยัง
กำหนดชื่อเป้าหมายการสร้างสำหรับโมดูลของคุณด้วย เพื่อให้คุณใช้ make [options]
<HelloWorldTests>
เพื่อสร้างโมดูลทดสอบและการอ้างอิงทั้งหมดได้
static_libs: ["androidx.test.runner"],
การตั้งค่า static_libs
จะสั่งให้ระบบบิลด์รวมเนื้อหา
ของโมดูลที่มีชื่อไว้ใน APK ที่ได้จากโมดูลปัจจุบัน ซึ่งหมายความว่า
โมดูลที่มีชื่อแต่ละโมดูลคาดว่าจะสร้างไฟล์ .jar
และเนื้อหาของไฟล์จะ
ใช้เพื่อแก้ไขการอ้างอิง classpath ในระหว่างเวลาคอมไพล์ รวมถึง
รวมไว้ใน apk ที่ได้
โมดูล androidx.test.runner
เป็นโมดูลที่สร้างไว้ล่วงหน้าสำหรับไลบรารี AndroidX Test Runner
ซึ่งรวมถึง Test Runner AndroidJUnitRunner
AndroidJUnitRunner
รองรับเฟรมเวิร์กการทดสอบ JUnit4 และแทนที่
InstrumentationTestRunner
ใน Android 10 อ่านเพิ่มเติม
เกี่ยวกับการทดสอบแอป Android ได้ที่ทดสอบแอปใน Android
หากคุณกำลังสร้างโมดูลการวัดผลใหม่ คุณควรเริ่มต้นด้วยandroidx.test.runner
ไลบรารีเป็นตัวเรียกใช้การทดสอบเสมอ ทรีแหล่งที่มาของแพลตฟอร์ม
ยังมีเฟรมเวิร์กการทดสอบที่มีประโยชน์อื่นๆ เช่น ub-uiautomator
,
mockito-target
, easymock
และอื่นๆ
certificate: "platform",
การตั้งค่า certificate
จะสั่งให้ระบบบิลด์ลงนามใน APK ด้วยใบรับรองเดียวกันกับแพลตฟอร์มหลัก
คุณต้องทำเช่นนี้หากการทดสอบใช้สิทธิ์หรือ API ที่มีการป้องกันลายเซ็น โปรดทราบว่าวิธีนี้เหมาะสำหรับการทดสอบแพลตฟอร์มอย่างต่อเนื่อง แต่ไม่ควรใช้ในโมดูลทดสอบ CTS โปรดทราบว่าตัวอย่างนี้
ใช้การตั้งค่าใบรับรองนี้เพื่อวัตถุประสงค์ในการอธิบายเท่านั้น โดยโค้ดทดสอบ
ของตัวอย่างไม่จำเป็นต้องให้ APK ทดสอบลงนามด้วย
ใบรับรองแพลตฟอร์มพิเศษ
หากคุณเขียนเครื่องมือสำหรับคอมโพเนนต์ที่อยู่นอกเซิร์ฟเวอร์ระบบ นั่นคือมีการแพ็กเกจคล้ายกับ APK ของแอปทั่วไปมากหรือน้อย
ยกเว้นว่ามีการสร้างลงในอิมเมจระบบและอาจเป็นแอปที่มีสิทธิ์พิเศษ มีโอกาสที่เครื่องมือของคุณจะกำหนดเป้าหมายไปยังแพ็กเกจแอป (ดูส่วนด้านล่างเกี่ยวกับไฟล์ Manifest) ของคอมโพเนนต์ ในกรณีนี้ แอปพลิเคชัน
makefile อาจมีการcertificate
ตั้งค่าของตัวเอง และโมดูลการวัดของคุณควรคงการตั้งค่าเดียวกันไว้ เนื่องจากหากต้องการกำหนดเป้าหมาย
การตรวจสอบในแอปที่อยู่ระหว่างการทดสอบ คุณต้องลงนามใน APK ของการทดสอบและ APK ของแอป
ด้วยใบรับรองเดียวกัน
ในกรณีอื่นๆ คุณไม่จำเป็นต้องมีการตั้งค่านี้เลย ระบบบิลด์จะลงนามด้วยใบรับรองเริ่มต้นในตัวตามตัวแปรบิลด์ และโดยปกติจะเรียกว่า dev-keys
test_suites: ["device-tests"],
test_suites
การตั้งค่าช่วยให้ Trade
Federation Test Harness ค้นหาการทดสอบได้ง่าย คุณเพิ่มชุดทดสอบอื่นๆ ได้ที่นี่ เช่น CTS เพื่อให้แชร์การทดสอบนี้ได้
${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk
การตั้งค่าที่ไม่บังคับ
การตั้งค่าที่ไม่บังคับต่อไปนี้จะมีการอธิบาย
test_config: "path/to/hello_world_test.xml"
test_config
การตั้งค่าจะสั่งให้ระบบบิลด์ทราบว่าเป้าหมายการทดสอบของคุณต้องมีการกำหนดค่าที่เฉพาะเจาะจง
โดยค่าเริ่มต้น AndroidTest.xml
ข้าง Android.bp
จะ
เชื่อมโยงกับการกำหนดค่า
auto_gen_config: true
การตั้งค่า auto_gen_config
จะระบุว่าจะสร้างการกำหนดค่าการทดสอบโดยอัตโนมัติหรือไม่ หากไม่มี AndroidTest.xml
อยู่ข้าง Android.bp
คุณไม่จำเป็นต้องตั้งค่าแอตทริบิวต์นี้เป็น "จริง" โดยชัดแจ้ง
require_root: true
การตั้งค่า require_root
จะสั่งให้ระบบบิลด์เพิ่ม RootTargetPreparer
ลงในการกำหนดค่าการทดสอบที่สร้างขึ้นโดยอัตโนมัติ ซึ่งจะรับประกันว่าการทดสอบจะทำงานด้วยสิทธิ์ระดับรูท
test_min_api_level: 29
การตั้งค่า test_min_api_level
จะสั่งให้ระบบบิลด์เพิ่ม
MinApiLevelModuleController ลงในการกำหนดค่าการทดสอบที่สร้างขึ้นโดยอัตโนมัติ เมื่อ Trade
Federation เรียกใช้การกำหนดค่าการทดสอบ ระบบจะข้ามการทดสอบหากพร็อพเพอร์ตี้อุปกรณ์
ของ ro.product.first_api_level
< test_min_api_level