إعداد تقارير عن المقاييس أو البيانات من اختبار 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 - pure Tradefed Test

إذا كنت تكتب صفك أو عدّاءك الخاص من Tradefed Test، ستنفِّذ IRemoteTest والحصول على ITestInvocationListener من خلال طريقة run(). هذا المستمع يمكن استخدامها لتسجيل المقاييس على النحو التالي:

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

جامعو المقاييس المتداولة

توفّر منصة Tradefed عنصر metrics_collector مخصّصًا لجمع المقاييس حسبها. بشكل موازٍ للاختبارات.

من جانب المضيف

BaseDeviceMetricCollector يمكن تنفيذها لجمع أي مقاييس من جهة المضيف والإبلاغ عنها كجزء من استدعاء الاختبار. هناك عدد من جامعات البيانات العامة متاحة لحالات الاستخدام المختلفة، لكننا نرحب دائمًا بالمساهمات الجديدة.

لتحديد جامع البيانات الذي سيتم استخدامه في استدعاء مقايضة، عليك إضافة الكائن إلى إعداد 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>

ومن خلال تحديد هذه الأنماط والمفتاح، فإن المجمِّع إذا رأى المفتاح محاولة سحب الملف المرتبط وتسجيله.

لكي يتم إنشاء هذه المفاتيح، يجب إجراء اختبار من جانب الجهاز (أدوات) يجب أن يحدد الملف الذي يجب تسجيله. تم ذلك بطريقة مماثلة على النحو الخاص بالمضيف (الموضح أعلاه).

  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.