โมดูลการทดสอบใหม่แต่ละโมดูลจะต้องมีไฟล์การกำหนดค่าเพื่อกำหนดทิศทางระบบบิลด์ด้วยข้อมูลเมตาของโมดูล การขึ้นต่อกันของเวลาคอมไพล์ และคำแนะนำด้านบรรจุภัณฑ์ ขณะนี้ Android ใช้ ระบบ Soong build เพื่อการกำหนดค่าการทดสอบที่ง่ายขึ้น
Soong ใช้ไฟล์ Blueprint หรือ .bp
ซึ่งเป็นคำอธิบายง่ายๆ ของโมดูลที่จะสร้างเหมือน JSON รูปแบบนี้จะแทนที่ระบบ Make-based ที่ใช้ในรุ่นก่อนหน้า ดู ไฟล์อ้างอิง Soong บน แดชบอร์ดการรวมอย่างต่อเนื่อง เพื่อดูรายละเอียดทั้งหมด
หากต้องการรองรับการทดสอบแบบกำหนดเองหรือใช้ ชุดทดสอบความเข้ากันได้ ของ Android (CTS) ให้ทำตาม การกำหนดค่าการทดสอบที่ซับซ้อน แทน
ตัวอย่าง
รายการด้านล่างมาจากไฟล์การกำหนดค่า 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
และเนื้อหาจะถูกใช้เพื่อแก้ไขการอ้างอิงคลาสพาธในช่วงเวลาคอมไพล์ รวมถึงรวมเข้ากับ apk ที่เป็นผลลัพธ์ด้วย
โมดูล androidx.test.runner
ถูกสร้างไว้ล่วงหน้าสำหรับ AndroidX Test Runner Library ซึ่งรวมถึงตัวดำเนินการทดสอบ AndroidJUnitRunner
AndroidJUnitRunner
รองรับเฟรมเวิร์กการทดสอบ JUnit4 และแทนที่ InstrumentationTestRunner
ใน Android 10 อ่านเพิ่มเติมเกี่ยวกับการทดสอบแอป Android ได้ที่ Test apps บน Android
หากคุณกำลังสร้างโมดูลเครื่องมือวัดใหม่ คุณควรเริ่มต้นด้วยไลบรารี androidx.test.runner
เป็นตัวดำเนินการทดสอบของคุณเสมอ แผนผังแหล่งที่มาของแพลตฟอร์มยังรวมถึงเฟรมเวิร์กการทดสอบที่มีประโยชน์อื่นๆ เช่น ub-uiautomator
, mockito-target
, easymock
และอื่นๆ
certificate: "platform",
การตั้งค่า certificate
จะสั่งให้ระบบบิลด์ลงนาม APK ด้วยใบรับรองเดียวกันกับแพลตฟอร์มหลัก นี่เป็นสิ่งจำเป็นหากการทดสอบของคุณใช้สิทธิ์หรือ API ที่มีการป้องกันด้วยลายเซ็น โปรดทราบว่าสิ่งนี้เหมาะสำหรับการทดสอบอย่างต่อเนื่องของแพลตฟอร์ม แต่ ไม่ ควรใช้ในโมดูลทดสอบ CTS โปรดทราบว่าตัวอย่างนี้ใช้การตั้งค่าใบรับรองนี้เพื่อจุดประสงค์ในการอธิบายเท่านั้น: จริงๆ แล้วโค้ดทดสอบของตัวอย่างไม่จำเป็นสำหรับ APK การทดสอบที่จะลงนามด้วยใบรับรองแพลตฟอร์มพิเศษ
หากคุณกำลังเขียนเครื่องมือสำหรับส่วนประกอบของคุณที่อยู่นอกเซิร์ฟเวอร์ระบบ กล่าวคือ ส่วนประกอบนั้นบรรจุมาไม่มากก็น้อยเหมือนกับ APK ของแอปทั่วไป ยกเว้นว่ามันติดตั้งอยู่ในอิมเมจระบบและอาจเป็นแอปที่ได้รับสิทธิ์ มีโอกาสที่เครื่องมือของคุณจะ กำหนดเป้าหมายแพ็คเกจแอป (ดูส่วนด้านล่างเกี่ยวกับรายการ) ของส่วนประกอบของคุณ ในกรณีนี้ makefile แอปพลิเคชันของคุณอาจมีการตั้ง 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