توضّح هذه الصفحة كيفية إعداد تقارير عن المقاييس إلى جانب نتائج الاختبار عند كتابة اختبار في 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 أو أداة تنفيذ اختبارات، عليك تنفيذ
IRemoteTest
والحصول على ITestInvocationListener
من خلال طريقة run()
. يمكن استخدام هذا المستمع
لتسجيل المقاييس على النحو التالي:
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
أدوات جمع مقاييس Tradefed
توفّر منصة Tradefed كائن metrics_collector
مخصّصًا لجمع المقاييس بشكل متوازي مع الاختبارات.
من جانب المضيف
يمكن تنفيذ BaseDeviceMetricCollector لجمع أي مقاييس من جهة المضيف والإبلاغ عنها كجزء من طلب الاختبار. يتوفّر حاليًا عدد من أدوات جمع البيانات العامة لحالات استخدام مختلفة، ولكننا نرحب دائمًا بالمساهمات الجديدة.
من أجل تحديد أداة التجميع المُراد استخدامها في استدعاء Tradefed، ما عليك سوى إضافة الكائن إلى إعداد 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>
من خلال تحديد هذه الأنماط والمفتاح، سيحاول المجمّع سحب الملف المرتبط وتسجيله إذا رصد المفتاح.
لكي يتم إنشاء هذه المفاتيح، يجب أن يحدِّد الاختبار من جهة الجهاز (الأدوات)ملفّاً يجب تسجيله. ويتم ذلك بطريقة مشابهة لطريقة الجانب المضيف (الموضّحة أعلاه).
- أضِف
collector-device-lib
إلى حزمة APK الاختبارية في ملفات make:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
- استخدِم القاعدة @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.