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

בדף הזה מוסבר איך לדווח על מדדים יחד עם תוצאות הבדיקה כשכותבים בדיקה ב-TrendF.

היתרון של רישום ביומן דרך צינור עיבוד הנתונים של 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 באמצעות השיטה run(). אפשר להשתמש במאזין הזה כדי לתעד מדדים באופן הבא:

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

אוספים של מדדים ב-Tradefed

Trafed מספק אובייקט 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' לכל תרחיש בדיקה.

בצד המכשיר

כשמריצים בדיקות בצד המכשיר (Instrumentations, בדיקות UIAutomator וכו'), יכול להיות שאי אפשר יהיה להשתמש באוסף בצד המארח שמבצע איסוף אסינכרוני. לדוגמה, צילום מסך שצולם באופן אסינכרוני לא יכלול את המסך הרצוי ויהיה חסר תועלת.

כדי לעמוד בתרחישי השימוש האלה, יש גרסה של המצטברים שלנו בצד המכשיר, שאפשר להשתמש בה בכל מכשיר 'AndroidJUnitRunner'. אפשר להטמיע את BaseMetricListener כדי לדווח באופן אוטומטי על מדדים שנאספים באופן שתואם באופן מלא לצינור עיבוד הנתונים של Tradefed לדיווח.

אם אתם משתמשים בהרצה 'AndroidJUnitTest' מ-Trendified, תוכלו פשוט לציין את אפשרות שורת הפקודה הבאה כדי שהקולקטור יריץ את הבדיקות:

  --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 לבדיקה בקובצי היצירה:
  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.