تتّبع البنية العامة لإعدادات الوحدة نمطًا مشابهًا لإعدادات Tradefed XML العادية، ولكن مع بعض القيود بسبب تنفيذها كجزء من مجموعة.
قائمة بالعلامات المسموح بها
يمكن أن يحتوي AndroidTest.xml
أو إعدادات الوحدة بشكل عام على علامات XML التالية فقط: target_preparer
وmulti_target_preparer
وtest
وmetrics_collector
.
على الرغم من أنّ هذه القائمة تبدو مقيّدة، إلا أنّها تتيح لك تحديد احتياجات إعداد وحدة الاختبار والاختبار الذي سيتم تنفيذه بدقة.
ملاحظة: راجِع إعدادات XML في Tradefed إذا كنت بحاجة إلى تذكير بالعلامات المختلفة.
ستؤدي محاولة تشغيل عناصر مثل build_provider
أو result_reporter
من داخل إعدادات الوحدة إلى ظهور الخطأ ConfigurationException
. والهدف من ذلك هو تجنُّب توقُّع أن تنفّذ هذه العناصر بعض المهام من داخل الوحدة.
مثال على إعداد الوحدة
<configuration description="Config for CTS Gesture test cases">
<option name="test-suite-tag" value="cts" />
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="cleanup-apks" value="true" />
<option name="test-file-name" value="CtsGestureTestCases.apk" />
</target_preparer>
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="android.gesture.cts" />
<option name="runtime-hint" value="10m50s" />
</test>
</configuration>
يصف هذا الإعداد اختبارًا يتطلّب تثبيت CtsGestureTestCases.apk
وسيتم تشغيل أداة قياس الأداء مقابل حزمة android.gesture.cts
.
علامتا التضمين <include>
و<template-include>
لا يُنصح باستخدام <include>
و<template-include>
في إعدادات الوحدات. ولا يُضمَن عملها على النحو المتوقّع.
حالة خاصة لعلامة metrics_collector
يُسمح باستخدام metrics_collector
ولكن يقتصر على الفئة
FilePullerLogCollector
لتحديد ملف أو دليل معيّن يتم استرداده وتسجيله في الوحدة. يكون هذا الإجراء مفيدًا إذا كنت تحتفظ بالسجلات في موقع جغرافي معيّن وأردت استردادها تلقائيًا.
مثال على الإعداد:
<configuration description="Config for CTS UI Rendering test cases">
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="cleanup-apks" value="true" />
<option name="test-file-name" value="CtsUiRenderingTestCases.apk" />
</target_preparer>
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="android.uirendering.cts" />
<option name="runtime-hint" value="11m55s" />
<option name="runner" value="android.uirendering.cts.runner.UiRenderingRunner" />
<option name="isolated-storage" value="false" />
</test>
<!-- Collect the files in the dump directory for debugging -->
<metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
<option name="directory-keys" value="/sdcard/UiRenderingCaptures" />
<option name="collect-on-run-ended-only" value="true" />
</metrics_collector>
</configuration>
ماذا عن معلومات الإصدارات أو عمليات التنزيل؟
قد يعطي تعريف العلامات المسموح بها انطباعًا خاطئًا بأنّ الوحدة لن تتلقّى أي معلومات حول الإصدار. هذا غير صحيح.
يتم توفير معلومات الإصدار من إعدادات حزمة التطبيقات على مستوى الحزمة، وستتم مشاركتها بين جميع وحدات الحزمة. يتيح ذلك إعدادًا واحدًا على أعلى مستوى للمجموعة من أجل تشغيل جميع الوحدات النمطية التي تشكّل جزءًا من المجموعة.
على سبيل المثال، بدلاً من أن يستعلم كل وحدة من مجموعة أدوات اختبار التوافق (CTS) بشكل فردي عن معلومات الجهاز وأنواعه وما إلى ذلك، يتم إجراء عملية الإعداد على مستوى مجموعة أدوات اختبار التوافق (cts.xml
) مرة واحدة، وستتلقّى كل وحدة هذه المعلومات إذا طلبتها.
لكي تتلقّى العناصر في الوحدة معلومات الإنشاء، عليها اتّباع الخطوات نفسها كما في إعدادات Tradefed العادية: تنفيذ واجهة IBuildReceiver
لتلقّي IBuildInfo
. لمزيد من التفاصيل، راجِع مقالة الاختبار باستخدام الجهاز.
حقول البيانات الوصفية
يتضمّن عدد كبير من وحدات الاختبار بعض metadata
المواصفات،
لكل منها هدف فريد.
مثال:
<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
<option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
<option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
المكوّن
تصف بيانات التعريف component
مكوّن Android العام الذي يهدف النموذج إلى اختباره. ليس له أي تأثير مباشر في تنفيذ الاختبار، بل يُستخدم بشكل أساسي لأغراض تنظيمية.
تتوفّر قائمة محدّثة بالمكوّنات المسموح بها في مجموعة أدوات اختبار التوافق (CTS) في CtsConfigLoadingTest. يفشل هذا الاختبار في مرحلة ما قبل الإرسال إذا تمت إضافة مكوّن غير موجود إلى وحدة CTS.
يمكنك فلترة عملية تنفيذ مجموعة الاختبارات استنادًا إلى المكوّنات باستخدام module-metadata-include-filter
وmodule-metadata-exclude-filter
.
مثال:
--module-metadata-include-filter component framework
لا يشغّل هذا المثال سوى وحدة الاختبار التي تمّت إضافة التعليق التوضيحي framework
إليها.
المَعلمة
بيانات parameter
الوصفية هي بيانات إعلامية وتؤثر في تنفيذ الاختبار. تحدّد هذه السمة وضع Android الذي تنطبق عليه وحدة الاختبار.
في هذه الحالة، تقتصر الأوضاع على أوضاع Android ذات المستوى العالي، مثل
instant apps
أو secondary users
أو different abis
.
أثناء تشغيل المجموعة، إذا كان الوضع ينطبق على الاختبار، يتم إنشاء عدة صيغ لوحدة الاختبار استنادًا إلى الوضع. تُجري كل صيغة اختبارات مشابهة ولكن في أوضاع مختلفة.
- استبدِل
instant_app
بما يلي: أنشئ صيغة من الاختبارات تثبّت حِزم APK كتطبيقات فورية. multi_abi
: أنشئ صيغة مختلفة من الاختبارات لكل واجهة ABI يتيحها الجهاز.secondary_user
: يمكنك إنشاء صيغة مختلفة من الاختبارات التي تثبّت حِزم APK وتُجري الاختبارات كمستخدم ثانوي.
جمع المقاييس ومعالجتها بعد الاختبار لوحدات اختبار الأداء
بالنسبة إلى وحدات اختبار الأداء، يُسمح باستخدام metrics_collector
وmetric_post_processor
على مستوى الوحدة لأنّها ضرورية لاختبارات الأداء.
يمكن أن تكون أدوات جمع المقاييس ومعالجتها اللاحقة على مستوى الوحدة النمطية خاصة بالوحدة النمطية.
لا يُنصح بتحديد معالجات لاحقة على مستوى كل من المستوى الأعلى ومستوى الوحدة.
يجب أن يتضمّن إعداد وحدة اختبار الأداء البيانات الوصفية test-type
بالقيمة performance
، كما يلي:
xml
<option name="config-descriptor:metadata" key="test-type" value="performance" />
بدون ذلك، إذا كان إعداد الاختبار يتضمّن metric_collector
بخلاف FilePullerLogCollector
أو أي metric_post_processor
، سيفشل الاختبار في مرحلة ما قبل الإرسال.
مثال على إعداد وحدة اختبار الأداء:
<configuration description="Runs sample performance test.">
<!-- Declare as a performance test module -->
<option name="config-descriptor:metadata" key="test-type" value="performance" />
<option name="test-tag" value="hello-world-performance-test" />
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.test.example.helloworldperformance.HelloWorldPerformanceTest" />
</test>
<!-- Add module-level post processor MetricFilePostProcessor -->
<metric_post_processor class="com.android.tradefed.postprocessor.MetricFilePostProcessor">
<option name="aggregate-similar-tests" value="true" />
<option name="enable-per-test-log" value="false" />
</metric_post_processor>
</configuration>