การกำหนดค่าการสร้างอย่างง่าย

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