דווח על מדדים או נתונים מבדיקת 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 טהור

אם אתה כותב מחלקה או רץ של Tradefed Test משלך, תטמיע את IRemoteTest ותקבל ITestInvocationListener דרך שיטת run() . ניתן להשתמש במאזין זה לרישום מדדים באופן הבא:

    listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);

אספני מדדים טריידים

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 של המכשור שלך יצטרך לכלול אותם באופן סטטי על ידי הוספת לקובץ 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>

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

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

  1. הוסף את ה- collector-device-lib ל-APK המבחן שלך בקבצי ה-make:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. השתמש בכלל ה-@ שאנו מספקים לתיעוד קבצים:
    @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 שלך.