หน้านี้อธิบายวิธีการรายงานตัววัดพร้อมกับผลการทดสอบเมื่อเขียนการทดสอบใน 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 Test ของคุณเอง คุณจะใช้ IRemoteTest และรับ ITestInvocationListener
ผ่านเมธอด run()
Listener นี้สามารถใช้เพื่อบันทึกการวัดดังนี้:
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
ตัวรวบรวมตัวชี้วัดที่ Tradefed
Tradefed จัดเตรียมออบเจ็กต์ metrics_collector
เฉพาะเพื่อรวบรวมการวัดควบคู่ไปกับการทดสอบ
ทางด้านเจ้าบ้าน
BaseDeviceMetricCollector สามารถนำไปใช้เพื่อรวบรวมตัววัดใดๆ จากฝั่งโฮสต์ และรายงานเป็นส่วนหนึ่งของการเรียกใช้การทดสอบ มีตัวรวบรวมทั่วไปจำนวนหนึ่งอยู่แล้วสำหรับกรณีการใช้งานที่แตกต่างกัน แต่เรายินดีรับการมีส่วนร่วมใหม่ๆ เสมอ
เพื่อระบุตัวรวบรวมที่จะใช้ในการร้องขอ Tradefed ของคุณ คุณเพียงแค่ต้องเพิ่มออบเจ็กต์ลงในการกำหนดค่า Tradefed XML ของคุณ:
ตัวอย่าง:
<metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
<option name="categories" value="freq"/>
</metrics_collector>
ตัวสะสมที่มีอยู่ในปัจจุบันบางส่วน: * ตัวสะสมอุณหภูมิ ที่รวบรวมอุณหภูมิเป็นระยะระหว่างการทดสอบ * 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 ของคุณ