โครงสร้าง AndroidTest.xml

โครงสร้างโดยรวมของการกำหนดค่าโมดูลเป็นไปตามรูปแบบที่คล้ายกัน กับการกำหนดค่า XML ของ Tradefed ปกติ แต่มีข้อจำกัดบางอย่างเนื่องจาก ข้อเท็จจริงที่ว่าการกำหนดค่าเหล่านี้ทำงานเป็นส่วนหนึ่งของชุดทดสอบ

รายการแท็กที่อนุญาต

AndroidTest.xml หรือการกำหนดค่าโมดูลในวงกว้างขึ้นจะมีได้เฉพาะแท็ก XML ต่อไปนี้ target_preparer, multi_target_preparer, test และ metrics_collector

แม้ว่ารายการดังกล่าวจะดูเหมือนเป็นการจำกัด แต่ก็ช่วยให้คุณกำหนดความต้องการในการตั้งค่าโมดูลทดสอบและทดสอบที่จะเรียกใช้ได้อย่างแม่นยำ

หมายเหตุ: ดูการกำหนดค่า XML ของ Tradefed หากต้องการทบทวนแท็กต่างๆ

ออบเจ็กต์ เช่น build_provider หรือ result_reporter จะทำให้เกิด ConfigurationException หากพยายามเรียกใช้จากภายในโมดูล การกำหนดค่า ซึ่งมีจุดประสงค์เพื่อหลีกเลี่ยงการคาดหวังว่าออบเจ็กต์เหล่านี้จะทำงานบางอย่างจากภายในโมดูล

ตัวอย่างการกำหนดค่าโมดูล

<configuration description="Config for CTS Gesture test cases">
    <option name="test-suite-tag" value="cts" />
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsGestureTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.gesture.cts" />
        <option name="runtime-hint" value="10m50s" />
    </test>
</configuration>

การกำหนดค่านี้อธิบายการทดสอบที่ต้องติดตั้ง CtsGestureTestCases.apk และจะเรียกใช้การตรวจสอบกับแพ็กเกจ android.gesture.cts

แท็กการรวม <include> และ <template-include>

ไม่แนะนำให้ใช้ <include> และ <template-include> ในการกำหนดค่าโมดูล และไม่รับประกันว่าจะทำงานได้ตามที่คาดไว้

กรณีพิเศษสำหรับแท็ก metrics_collector

metrics_collector ได้รับอนุญาต แต่จำกัดไว้ที่คลาส FilePullerLogCollector เพื่อระบุไฟล์หรือไดเรกทอรีที่ต้องการดึงและบันทึกสำหรับ โมดูล ซึ่งจะเป็นประโยชน์หากคุณทิ้งบันทึกไว้ในตำแหน่งใดตำแหน่งหนึ่งและ ต้องการกู้คืนบันทึกเหล่านั้นโดยอัตโนมัติ

ตัวอย่างการกำหนดค่า

<configuration description="Config for CTS UI Rendering test cases">
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsUiRenderingTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.uirendering.cts" />
        <option name="runtime-hint" value="11m55s" />
        <option name="runner" value="android.uirendering.cts.runner.UiRenderingRunner" />
        <option name="isolated-storage" value="false" />
    </test>

    <!-- Collect the files in the dump directory for debugging -->
    <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
        <option name="directory-keys" value="/sdcard/UiRenderingCaptures" />
        <option name="collect-on-run-ended-only" value="true" />
    </metrics_collector>
</configuration>

แล้วข้อมูลการสร้างหรือการดาวน์โหลดล่ะ

คำจำกัดความของแท็กที่อนุญาตอาจทำให้เกิดความเข้าใจผิดว่า โมดูลจะไม่ได้รับข้อมูลการสร้างใดๆ ไม่เป็นความจริง

ข้อมูลบิลด์จะมาจากการตั้งค่าระดับชุดทดสอบและจะแชร์โดยโมดูลทั้งหมดของชุดทดสอบ ซึ่งช่วยให้ตั้งค่าระดับบนสุดเพียงครั้งเดียว สำหรับชุดโปรแกรมเพื่อเรียกใช้โมดูลทั้งหมดที่เป็นส่วนหนึ่งของชุดโปรแกรม

ตัวอย่างเช่น แทนที่โมดูลชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) แต่ละโมดูลจะค้นหาข้อมูลอุปกรณ์ ประเภท ฯลฯ แยกกัน การตั้งค่าระดับชุดเครื่องมือ CTS (cts.xml) จะดำเนินการเพียงครั้งเดียว และแต่ละโมดูลจะได้รับข้อมูลดังกล่าวหากขอ

ออบเจ็กต์ในโมดูลต้องทำเช่นเดียวกับการกำหนดค่า Tradefed ปกติ นั่นคือใช้IBuildReceiverอินเทอร์เฟซเพื่อรับ IBuildInfo จึงจะรับข้อมูลการสร้างได้ ดูรายละเอียดเพิ่มเติมได้ที่ การทดสอบกับอุปกรณ์

ช่องข้อมูลเมตา

โมดูลทดสอบจำนวนมากมีmetadataข้อกำหนดบางอย่าง ซึ่งแต่ละข้อมีเป้าหมายที่ไม่ซ้ำกัน

ตัวอย่าง

  <option name="config-descriptor:metadata" key="component" value="framework" />
  <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
  <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
  <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />

ส่วนประกอบ

ข้อมูลเมตา component อธิบายคอมโพเนนต์ Android ทั่วไปที่โมดูล ต้องการทดสอบ โดยจะไม่ส่งผลโดยตรงต่อการดำเนินการทดสอบ แต่จะใช้เพื่อวัตถุประสงค์ในการจัดระเบียบเป็นหลัก

รายการคอมโพเนนต์ที่อนุญาตล่าสุดสำหรับ CTS อยู่ใน CtsConfigLoadingTest การทดสอบนี้จะล้มเหลวใน Presubmit หากมีการเพิ่มคอมโพเนนต์ที่ไม่มีอยู่ลงในโมดูล CTS

คุณสามารถกรองการเรียกใช้ชุดทดสอบตามคอมโพเนนต์ได้โดยใช้ module-metadata-include-filter และ module-metadata-exclude-filter

ตัวอย่าง

  --module-metadata-include-filter component framework

ตัวอย่างนี้จะเรียกใช้เฉพาะโมดูลการทดสอบที่มีคำอธิบายประกอบด้วย framework component

พารามิเตอร์

parameter ข้อมูลเมตาเป็นข้อมูลและมีผลต่อการทดสอบ การดำเนินการ โดยจะระบุโหมด Android ที่ใช้กับโมดูลทดสอบ ในกรณีนี้ โหมดจะจำกัดไว้ที่โหมด Android ระดับสูง เช่น instant apps, secondary users หรือ different abis

ในระหว่างการเรียกใช้ชุดทดสอบ หากโหมดใช้กับการทดสอบ ระบบจะสร้างโมดูลทดสอบหลายรูปแบบตามโหมด แต่ละรูปแบบจะทำการทดสอบที่คล้ายกัน แต่ในโหมดที่แตกต่างกัน

  • instant_app: สร้างการทดสอบรูปแบบต่างๆ ที่ติดตั้ง APK เป็น Instant App
  • multi_abi: สร้างการทดสอบรูปแบบต่างๆ สำหรับแต่ละ ABI ที่อุปกรณ์รองรับ
  • secondary_user: สร้างการทดสอบรูปแบบต่างๆ ที่ติดตั้ง APK และ เรียกใช้การทดสอบในฐานะผู้ใช้รอง

การรวบรวมเมตริกและการประมวลผลภายหลังสำหรับโมดูลการทดสอบประสิทธิภาพ

สำหรับโมดูลทดสอบประสิทธิภาพ ระบบอนุญาตให้ใช้ metrics_collector และ metric_post_processor ระดับโมดูล เนื่องจากจำเป็นต่อการทดสอบประสิทธิภาพ ตัวรวบรวมเมตริกระดับโมดูลและตัวประมวลผลภายหลังอาจเป็นโมดูลที่เฉพาะเจาะจง ไม่แนะนำให้ระบุตัวประมวลผลหลังทั้งที่ระดับบนสุดและระดับโมดูล

การกำหนดค่าโมดูลการทดสอบประสิทธิภาพต้องมีtest-typeข้อมูลเมตา ที่มีค่า performance เช่น xml <option name="config-descriptor:metadata" key="test-type" value="performance" /> หากไม่มีข้อมูลเมตานี้ หากการกำหนดค่าการทดสอบมี metric_collector อื่นๆ นอกเหนือจาก FilePullerLogCollector หรือ metric_post_processor ใดๆ การทดสอบ จะล้มเหลวในขั้นตอนก่อนส่ง

ตัวอย่างการกำหนดค่าโมดูลการทดสอบประสิทธิภาพ

<configuration description="Runs sample performance test.">
    <!-- Declare as a performance test module -->
    <option name="config-descriptor:metadata" key="test-type" value="performance" />
    <option name="test-tag" value="hello-world-performance-test" />
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="class" value="android.test.example.helloworldperformance.HelloWorldPerformanceTest" />
    </test>
    <!-- Add module-level post processor MetricFilePostProcessor -->
    <metric_post_processor class="com.android.tradefed.postprocessor.MetricFilePostProcessor">
        <option name="aggregate-similar-tests" value="true" />
        <option name="enable-per-test-log" value="false" />
    </metric_post_processor>
</configuration>