หน้านี้อธิบายวิธีรายงานเมตริกพร้อมกับผลการทดสอบเมื่อเขียนการทดสอบใน Tradefed
ประโยชน์ของการบันทึกผ่านไปป์ไลน์ Tradefed คือการค้นหาเมตริกพร้อมกับผลลัพธ์การทำงาน การบันทึกเมตริกสามารถทำได้อย่างเป็นธรรมชาติ ในการทดสอบ ซึ่งช่วยให้ผู้เขียนการทดสอบเพิ่มการวัดผลได้สะดวกยิ่งขึ้น
DeviceTestCase - รูปแบบ JUnit3
หากการทดสอบขยาย DeviceTestCase
ในการทดสอบรูปแบบ JUnit3 คุณจะเรียกใช้เมธอด
addTestMetric(String key, String value) จากภายในกรณีทดสอบใดก็ได้เพื่อรายงาน
เมตริก คุณเรียกใช้ฟังก์ชันนี้ได้หลายครั้งตราบใดที่คีย์ไม่ซ้ำกัน
ตัวอย่าง
public static class TestMetricTestCase extends DeviceTestCase {
public void testPass() {
addTestMetric("key1", "metric1");
}
public void testPass2() {
addTestMetric("key2", "metric2");
}
}
หากต้องการบันทึกไฟล์เพื่อให้พร้อมใช้งานใน result_reporters คุณสามารถ
เรียกใช้เมธอด addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream)
จากภายในกรณีทดสอบใดก็ได้เพื่อรายงานไฟล์ที่จะบันทึก
ตัวอย่าง
public static class TestLogTestCase extends DeviceTestCase {
public void testPass() {
try (InputStreamSource source = getDevice().getScreenshot()) {
addTestLog("screenshot", LogDataType.PNG, source);
}
}
}
TestCase - การทดสอบ JUnit3 ปกติ
หากต้องการรายงานเมตริกภายใน Tradefed จากคลาส JUnit3 TestCase ปกติ
คุณจะต้องแปลงเป็น MetricTestCase แทน ซึ่งเป็นคลาสเดียวกัน
ทุกประการที่มีเมธอดเพิ่มเติมคือ addTestMetric(String key, String value)
DeviceJUnit4ClassRunner - รูปแบบ JUnit4
หากการทดสอบสไตล์ JUnit4 ทำงานด้วย
DeviceJUnit4ClassRunner
คุณจะบันทึกเมตริกภายในกรณีทดสอบ (ภายใน @Test) เพื่อให้ Tradefed รายงานได้ด้วย
คุณจะต้องใช้TestMetricsกฎเพื่อรายงานเมตริก
ตัวอย่าง
@RunWith(DeviceJUnit4ClassRunner.class)
public static class Junit4TestClass {
@Rule
public TestMetrics metrics = new TestMetrics();
@Test
public void testPass5() {
// test log through the rule.
metrics.addTestMetric("key", "value");
}
@Test
public void testPass6() {
metrics.addTestMetric("key2", "value2");
}
}
หากต้องการรายงานไฟล์ คุณจะต้องใช้TestLogDataกฎเพื่อรายงาน
ตัวอย่าง
@RunWith(DeviceJUnit4ClassRunner.class)
public static class Junit4TestClass {
@Rule
public TestLogData logs = new TestLogData();
@Test
public void testPass5() {
// test log through the rule.
try (InputStreamSource source = getDevice().getScreenshot()) {
logs.addTestLog("screenshot", LogDataType.PNG, source);
}
}
}
IRemoteTest - การทดสอบ Tradefed อย่างแท้จริง
หากคุณเขียนคลาสทดสอบหรือโปรแกรมเรียกใช้ Tradefed ของคุณเอง คุณจะต้องใช้
IRemoteTest
และรับ ITestInvocationListener ผ่านเมธอด run() โดยใช้ Listener นี้
เพื่อบันทึกเมตริกได้ดังนี้
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
เครื่องมือรวบรวมเมตริก Tradefed
Tradefed มีออบเจ็กต์ metrics_collector โดยเฉพาะเพื่อรวบรวมเมตริกในการทดสอบแบบ
ขนาน
ทางฝั่งโฮสต์
BaseDeviceMetricCollector สามารถนำไปใช้เพื่อรวบรวมเมตริกจากฝั่งโฮสต์และรายงานเมตริกเหล่านั้น เป็นส่วนหนึ่งของการเรียกใช้การทดสอบ ปัจจุบันมีตัวรวบรวมทั่วไปหลายตัวที่พร้อมใช้งานสำหรับ Use Case ต่างๆ แต่เรายินดีรับการมีส่วนร่วมใหม่ๆ เสมอ
หากต้องการระบุตัวรวบรวมที่จะใช้ในการเรียกใช้ Tradefed คุณเพียงแค่ต้องเพิ่มออบเจ็กต์ลงในการกำหนดค่า XML ของ Tradefed ดังนี้
ตัวอย่าง
<metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
<option name="categories" value="freq"/>
</metrics_collector>
ตัวรวบรวมที่มีอยู่ในปัจจุบันบางส่วนมีดังนี้ * TemperatureCollector ซึ่งจะรวบรวมอุณหภูมิเป็นระยะๆ ระหว่างการทดสอบ * AtraceCollector ที่รวบรวมโดยใช้ "atrace" สำหรับกรณีทดสอบแต่ละรายการ
ในฝั่งอุปกรณ์
เมื่อเรียกใช้การทดสอบฝั่งอุปกรณ์ (การทดสอบเครื่องมือ, การทดสอบ UIAutomator ฯลฯ) การมีตัวรวบรวมในฝั่งโฮสต์ที่รวบรวมแบบไม่พร้อมกันอาจไม่ เหมาะสม เช่น ภาพหน้าจอที่ถ่ายแบบไม่พร้อมกันมักจะพลาดหน้าจอที่ต้องการและไม่มีประโยชน์
เพื่อให้เป็นไปตามกรณีการใช้งานเหล่านี้ เราจึงมีตัวรวบรวมเวอร์ชันฝั่งอุปกรณ์ และสามารถใช้ในการตรวจสอบ "AndroidJUnitRunner" ได้ BaseMetricListener สามารถนำไปใช้เพื่อรายงานเมตริกที่รวบรวมโดยอัตโนมัติ ในลักษณะที่เข้ากันได้อย่างสมบูรณ์กับไปป์ไลน์การรายงานของ Tradefed
หากใช้โปรแกรมเรียกใช้ AndroidJUnitTest จาก Tradefed คุณเพียงแค่ระบุตัวเลือกบรรทัดคำสั่งต่อไปนี้ เพื่อให้ตัวรวบรวมทำงานร่วมกับการทดสอบ
--device-listeners android.device.collectors.ScreenshotListener
ข้อควรระวัง: APK ของเครื่องมือวัดส่วนใหญ่จะต้องรวมคลาสของตัวรวบรวมแบบคงที่โดยการเพิ่มข้อมูลต่อไปนี้ลงในไฟล์ Makefile เพื่อให้คลาสของตัวรวบรวมได้รับการแก้ไขในเวลาเรียกใช้
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
นอกจากนี้ เรายังยินดีรับการมีส่วนร่วมในตัวรวบรวมข้อมูลฝั่งอุปกรณ์ด้วย
ข้อควรพิจารณาพิเศษสำหรับห้องสวีท
สำหรับชุดทดสอบอย่าง CTS ที่มีการกำหนดค่าระดับบนสุดซึ่งเรียกใช้การกำหนดค่าโมดูลบางอย่าง
ไม่จำเป็นต้องระบุ metrics_collector ในการกำหนดค่าโมดูลแต่ละรายการ (AndroidTest.xml) และห้ามระบุด้วย
เพื่อให้มั่นใจว่าการรวบรวมเมตริกจะมีผลกับแต่ละโมดูลอย่างเท่าเทียมกัน
เฉพาะการกำหนดค่าระดับบนสุด (เช่น cts.xml) เท่านั้นที่ระบุ metrics_collector ได้
ตามที่อธิบายไว้ข้างต้น ระบบจะใช้และเรียกใช้ตัวรวบรวมเหล่านี้
กับแต่ละโมดูลของชุด
รวบรวมไฟล์บันทึกของอุปกรณ์จากโมดูล
มีการตั้งค่าเพื่อให้การทดสอบฝั่งอุปกรณ์แจ้งเตือนว่าควรเก็บรวบรวมไฟล์บางไฟล์
AndroidTest.xml สามารถระบุตัวรวบรวมที่จะค้นหาไฟล์ใน
อุปกรณ์และดึงไฟล์เหล่านั้นได้
<metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
<!-- repeatable: Pattern of key of a FILE we listen on that should be pulled -->
<option name = "pull-pattern-keys" value = "ScreenshotListener_.*" />
<!-- repeatable: The key of the DIRECTORY to pull -->
<option name = "directory-keys" value = "<example-key: /sdcard/atrace_logs>" />
</metrics_collector>
การระบุรูปแบบและคีย์เหล่านี้จะทำให้ตัวรวบรวมพยายามดึงและบันทึกไฟล์ที่เกี่ยวข้องหากเห็นคีย์
หากต้องการสร้างคีย์เหล่านี้ การทดสอบฝั่งอุปกรณ์ (การวัด) ควรระบุไฟล์ที่ควรบันทึก โดยจะดำเนินการในลักษณะที่คล้ายกัน กับฝั่งโฮสต์ (อธิบายไว้ข้างต้น)
- เพิ่ม
collector-device-libลงใน APK ทดสอบในไฟล์ Make ดังนี้
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
- ใช้ @rule ที่เราให้ไว้เพื่อบันทึกไฟล์
@RunWith(AndroidJUnit4.class)
public static class Junit4TestClass {
@Rule
public TestLogData logs = new TestLogData();
@Test
public void testPass5() {
// test log through the rule.
File logFile = new File("whatever");
logs.addTestLog("KEY", logFile);
}
}
ชื่อ KEY ในตัวอย่างด้านบนคือชื่อที่ใช้รายงานไฟล์
นี่คือชื่อที่คุณควรจับคู่ใน
FilePullerDeviceMetricCollector เพื่อให้ระบบดึงข้อมูลโดยอัตโนมัติ ชื่อควร
ไม่ซ้ำกัน
หมายเหตุ: เมื่อดึงไฟล์แล้ว FilePullerDeviceMetricCollector จะล้างไฟล์ออกจากอุปกรณ์โดยอัตโนมัติ
ฉันจะดูเมตริกได้จากที่ใด
โดยขึ้นอยู่กับ result_reporter ที่ระบุในการกำหนดค่า XML