توضّح هذه الصفحة كيفية إعداد تقارير عن المقاييس إلى جانب نتائج الاختبار عند كتابة اختبار في 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 من فئة 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 - اختبار Tradefed الخالص
إذا كنت تكتب فئة اختبار 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" لكل حالة اختبار.
على جانب الجهاز
عند إجراء اختبارات على الجهاز (مثل أدوات القياس واختبارات 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.