در این صفحه نحوه گزارش معیارها به همراه نتایج آزمون هنگام نوشتن آزمون در 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 - تست خالص Tradefed
اگر کلاس Tradefed Test یا runner خود را می نویسید، IRemoteTest را پیاده سازی کرده و از طریق متد run()
ITestInvocationListener
دریافت خواهید کرد. از این شنونده می توان برای ثبت معیارها به شرح زیر استفاده کرد:
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>
برخی از کلکتورهای موجود: * TemperatureCollector که دما را به صورت دوره ای در طول اجرای آزمایشی جمع آوری می کند. * AtraceCollector که با استفاده از "atrace" برای هر مورد آزمایشی جمع آوری می کند.
در سمت دستگاه
هنگام اجرای آزمایشهای سمت دستگاه (تستهای ابزار دقیق، تستهای UIAutomator و غیره)، داشتن جمعآوری در سمت میزبان که بهصورت ناهمزمان جمعآوری میشود ممکن است ایدهآل نباشد. به عنوان مثال، اسکرین شات گرفته شده به صورت ناهمزمان به احتمال زیاد صفحه مورد نظر را از دست می دهد و بی فایده خواهد بود.
به منظور پاسخگویی به این موارد استفاده، یک نسخه سمت دستگاه از مجموعههای ما وجود دارد و میتوان از آن در هر ابزار دقیق «AndroidJUnitRunner» استفاده کرد. BaseMetricListener را می توان به منظور گزارش خودکار معیارهایی که به روشی کاملاً سازگار با خط لوله گزارش Tradefed جمع آوری می شوند، پیاده سازی کرد.
اگر از رانر « AndroidJUnitTest » از Tradefed استفاده میکنید، میتوانید به سادگی گزینه خط فرمان زیر را مشخص کنید تا کلکتور شما با آزمایشهای شما اجرا شود:
--device-listeners android.device.collectors.ScreenshotListener
احتیاط: برای اینکه کلاسهای جمعآوری در زمان اجرا حل شوند، APK ابزار دقیق شما به احتمال زیاد باید با افزودن موارد زیر به فایل make شما، آنها را به صورت ایستا شامل شود:
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>
با مشخص کردن این الگوها و کلید، گردآورنده در صورت مشاهده کلید اقدام به کشیدن و ثبت فایل مربوطه می کند.
برای اینکه این کلیدها تولید شوند، یک آزمایش (دستگاه ابزار دقیق) باید فایلی را که باید ثبت شود مشخص کند. این کار به روشی مشابه سمت میزبان (که در بالا توضیح داده شد) انجام می شود.
- در فایلهای make،
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 شما دارد.