หน้านี้อธิบายวิธีรายงานเมตริกพร้อมกับผลการทดสอบเมื่อเขียนการทดสอบใน 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 จากคลาส TestCase ของ JUnit3 ปกติ คุณจะต้องแปลงเป็น 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 Test ของคุณเอง คุณจะเห็น
IRemoteTest
และรับ ITestInvocationListener
ผ่านเมธอด run()
Listener นี้
สามารถใช้ในการบันทึกเมตริกดังต่อไปนี้
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
ตัวรวบรวมเมตริก Tradefed
Tradefed มีออบเจ็กต์ metrics_collector
โดยเฉพาะเพื่อรวบรวมเมตริกควบคู่ไปกับการทดสอบ
ฝั่งโฮสต์
คุณสามารถใช้ BaseDeviceMetricCollector เพื่อรวบรวมเมตริกจากฝั่งโฮสต์และรายงานเมตริกเหล่านั้นเป็นส่วนหนึ่งของการเรียกใช้การทดสอบ มีนักสะสมทั่วไปจำนวนหนึ่งอยู่แล้ว พร้อมใช้งานสำหรับกรณีการใช้งานที่แตกต่างกัน แต่เรายินดีให้การสนับสนุนใหม่ๆ เสมอ
หากต้องการระบุเครื่องมือรวบรวมที่จะใช้ในการเรียกใช้ 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 การใช้เครื่องมือมักจะต้องรวมไฟล์แบบคงที่โดยการเพิ่ม ลงในไฟล์ Manifest ดังนี้
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