تصف هذه الصفحة كيفية الإبلاغ عن المقاييس إلى جانب نتائج الاختبار عند كتابة اختبار في 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>
ومن خلال تحديد هذه الأنماط والمفتاح، فإن المجمِّع إذا رأى المفتاح محاولة سحب الملف المرتبط وتسجيله.
لكي يتم إنشاء هذه المفاتيح، يجب إجراء اختبار من جانب الجهاز (أدوات) يجب أن يحدد الملف الذي يجب تسجيله. تم ذلك بطريقة مماثلة على النحو الخاص بالمضيف (الموضح أعلاه).
- أضِف "
collector-device-lib
" إلى حِزمة APK الاختبارية في ملف "إنشاء":
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.