الإبلاغ عن مقاييس أو بيانات من اختبار Tradefed

توضّح هذه الصفحة كيفية تسجيل المقاييس مع نتائج الاختبار عند كتابة اختبار في Tradefed.

تتمثّل فائدة تسجيل البيانات من خلال مسار Tradefed في العثور على مقاييسك إلى جانب نتائجك الوظيفية. يمكن تسجيل المقاييس بشكل طبيعي جدًا ضمن الاختبارات، ما يسهّل على كتّاب الاختبارات إضافة المزيد من أدوات القياس.

DeviceTestCase - JUnit3 style

إذا كان الاختبار يوسّع نطاق 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 من فئة TestCase عادية في JUnit3، يجب تحويلها إلى 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 الخاص بك، عليك تنفيذ IRemoteTest والحصول على ITestInvocationListener من خلال طريقة run(). يمكن استخدام أداة الاستماع هذه لتسجيل المقاييس على النحو التالي:

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

أدوات جمع المقاييس في Tradefed

توفّر 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" لكل حالة اختبار.

على الجهاز

عند إجراء اختبارات على الجهاز (مثل اختبارات Instrumentations و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. استخدِم القاعدة ‎ @التي نقدّمها لتسجيل الملفات:
    @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.