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

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

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

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

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

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

ออบเจ็กต์เช่น 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 การทดสอบนี้ล้มเหลวในการส่งล่วงหน้าหากมีการเพิ่มส่วนประกอบที่ไม่มีอยู่ในโมดูล CTS

คุณสามารถกรองการทำงานของชุดโปรแกรมตามส่วนประกอบโดยใช้ module-metadata-include-filter และ module-metadata-exclude-filter

ตัวอย่าง:

  --module-metadata-include-filter component framework

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

พารามิเตอร์

ข้อมูลเมตา 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 เนื่องจากจำเป็นต่อการทดสอบประสิทธิภาพ ตัวรวบรวมเมตริกระดับโมดูลและตัวประมวลผลหลังสามารถเป็นแบบเฉพาะของโมดูลได้ ไม่แนะนำให้ระบุ post-processor ทั้งในระดับบนสุดและระดับโมดูล

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