בדף הזה מוסבר איך לדווח על מדדים יחד עם תוצאות הבדיקה כשכותבים בדיקה ב-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 טהורה
אם אתם כותבים כיתת מבחן או ריצה משלכם ל-Trendified Test, חובה
IremoteTest
ומקבלים ITestInvocationListener
דרך ה-method run()
. המאזינים האלה
אפשר להשתמש בהם כדי לתעד מדדים באופן הבא:
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
אספנים של מדדים שעברו מסחר אלקטרוני
ב-Trended יש אובייקט 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 של האינסטרומנטציה יצטרך לכלול אותן באופן סטטי על ידי הוספת ל-createfile:
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 לבדיקה בקובצי היצירה:
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.