โมดูลทดสอบใหม่แต่ละโมดูลต้องมีไฟล์คอนฟิกูเรชันเพื่อกำหนดทิศทางของระบบบิลด์ด้วยข้อมูลเมตาของโมดูล การขึ้นต่อกันเวลาคอมไพล์ และคำแนะนำในการบรรจุภัณฑ์ ตอนนี้ Android ใช้ระบบบิลด์ Soong เพื่อการกำหนดค่าการทดสอบที่ง่ายขึ้น
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: ["android-support-test"],
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: ["android-support-test"],
การตั้งค่า static_libs
สั่งให้ระบบบิลด์รวมเนื้อหาของโมดูลที่มีชื่อเข้ากับ apk ที่เป็นผลลัพธ์ของโมดูลปัจจุบัน ซึ่งหมายความว่าแต่ละโมดูลที่มีชื่อคาดว่าจะสร้างไฟล์ .jar
และเนื้อหาจะถูกใช้สำหรับแก้ไขการอ้างอิง classpath ระหว่างเวลาคอมไพล์ รวมทั้งรวมเข้ากับ apk ที่เป็นผลลัพธ์
ในตัวอย่างนี้ สิ่งที่อาจเป็นประโยชน์สำหรับการทดสอบโดยทั่วไป:
android-support-test
ถูกสร้างไว้ล่วงหน้าสำหรับ Android Test Support Library ซึ่งรวมถึงตัวรันการทดสอบใหม่ AndroidJUnitRunner
: แทนที่ InstrumentationTestRunner
ในตัวที่เลิกใช้แล้วในขณะนี้ พร้อมรองรับเฟรมเวิร์กการทดสอบ JUnit4 อ่านเพิ่มเติมได้ที่ ทดสอบแอปบน Android
หากคุณกำลังสร้างโมดูลเครื่องมือวัดใหม่ คุณควรเริ่มต้นด้วยไลบรารี android-support-test
ของคุณ โครงสร้างต้นทางของแพลตฟอร์มยังรวมถึงเฟรมเวิร์กการทดสอบที่มีประโยชน์อื่นๆ เช่น 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
ทำให้ชุดทดสอบของสหพันธ์การค้าค้นพบได้ง่าย สามารถเพิ่มห้องชุดอื่นๆ ได้ที่นี่ เช่น 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
แอตทริบิวต์นี้ไม่จำเป็นต้องตั้งค่าเป็น true อย่างชัดเจน
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