การกำหนดค่าบิลด์อย่างง่าย

โมดูลทดสอบใหม่แต่ละรายการต้องมีไฟล์การกําหนดค่าเพื่อสั่งการระบบบิลด์ด้วยข้อมูลเมตาของโมดูล ไลบรารีที่ต้องอาศัยเวลาคอมไพล์ และวิธีการจัดแพ็กเกจ ตอนนี้ 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