โครงสร้างโดยรวมของการกำหนดค่าโมดูลเป็นไปตามรูปแบบที่คล้ายกัน กับการกำหนดค่า 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 Appmulti_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>