דיווח על מדדים או נתונים מבדיקת Tradefed

בדף הזה מוסבר איך לדווח על מדדים יחד עם תוצאות הבדיקה כשכותבים בדיקה ב-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>

כשמציינים את התבניות והמפתח האלה, אם המאגר מזהה את המפתח הוא ינסה למשוך את הקובץ המשויך ולתעד אותו ביומן.

כדי ליצור את המפתחות האלה, צריך לציין את הקובץ שצריך להיכלל ביומן בבדיקה בצד המכשיר (הוספת קוד למעקב). הדבר נעשה באופן דומה לצד המארח (כפי שמתואר למעלה).

  1. מוסיפים את collector-device-lib ל-APK לבדיקה בקובצי היצירה:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. משתמשים ב- @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.