تصف هذه الصفحة كيفية الإبلاغ عن المقاييس جنبًا إلى جنب مع نتائج الاختبار عند كتابة اختبار في 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 ، فيمكنك أيضًا تسجيل المقاييس داخل حالة الاختبار (داخل اختبار @) ليتم الإبلاغ عنها بواسطة 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 الخاص بك ، فسوف تقوم بتنفيذ IRemoteTest وتحصل على ITestInvocationListener
من خلال طريقة run()
. يمكن استخدام هذا المستمع لتسجيل المقاييس على النحو التالي:
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
جامعي المقاييس التجارية
يوفر 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 الخاص بالأجهزة إلى تضمينها بشكل ثابت عن طريق إضافة ما يلي إلى ملفك:
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
- استخدم القاعدة @ التي نوفرها لملفات السجل:
@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 الخاص بك.