โมดูลทดสอบใหม่แต่ละรายการต้องมีไฟล์การกําหนดค่าเพื่อสั่งการระบบบิลด์ด้วยข้อมูลเมตาของโมดูล ไลบรารีที่ต้องอาศัยเวลาคอมไพล์ และวิธีการจัดแพ็กเกจ ตอนนี้ Android ใช้ระบบการสร้าง Soong สำหรับการกําหนดค่าการทดสอบที่ง่ายขึ้น
Soong ใช้ไฟล์ Blueprint หรือ .bp
ซึ่งเป็นคำอธิบายแบบประกาศอย่างง่ายคล้าย JSON ของโมดูลที่จะสร้าง รูปแบบนี้มาแทนที่ระบบตามแบรนด์ที่ใช้ในรุ่นก่อนหน้า ดูรายละเอียดทั้งหมดได้ในไฟล์อ้างอิง Soong ในแดชบอร์ดการผสานรวมอย่างต่อเนื่อง
หากต้องการรองรับการทดสอบที่กําหนดเองหรือใช้ชุดเครื่องมือทดสอบความเข้ากันได้ (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>
ในการสร้างโมดูลการทดสอบและทรัพยากร Dependency ทั้งหมดได้
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 ด้านล่าง) ของคอมโพเนนต์นั้นจึงมีสูง ในกรณีนี้ ไฟล์ make ของแอปพลิเคชันอาจมีการตั้งค่า certificate
ของตนเอง และโมดูลเครื่องมือวัดผลควรใช้การตั้งค่าเดียวกัน เนื่องจาก APK ทดสอบและ APK ของแอปต้องลงนามด้วยใบรับรองเดียวกันจึงจะกำหนดเป้าหมายเครื่องมือวัดผลในแอปที่ทดสอบได้
ในกรณีอื่นๆ คุณไม่จำเป็นต้องมีการตั้งค่านี้เลย ระบบบิลด์จะลงนามด้วยใบรับรองในตัวเริ่มต้นตามตัวแปรของบิลด์ และโดยทั่วไปจะเรียกว่า dev-keys
test_suites: ["device-tests"],
การตั้งค่า test_suites
ช่วยให้ชุดทดสอบของ Trade Federation ค้นพบการทดสอบได้โดยง่าย คุณเพิ่มชุดโปรแกรมอื่นๆ เช่น 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