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

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