إعداد برنامج Repo
اتّبِع التعليمات الواردة في مقالة تنزيل رمز المصدر للحصول على
رمز المصدر لنظام Android وإنشائه. عند تنفيذ الأمر repo init، حدِّد فرعًا معيّنًا من مجموعة أدوات اختبار التوافق (CTS) باستخدام -b. يضمن ذلك تضمين تغييراتك في مجموعة أدوات اختبار التوافق في الإصدارات اللاحقة من هذه المجموعة.
يوضّح رمز المثال التالي كيفية استخدام repo init.
mkdir android11-tests-dev && cd android11-tests-dev && repo init -c -u https://android.googlesource.com/platform/manifest -b android11-tests-dev --use-superproject --partial-clone --partial-clone-exclude=platform/frameworks/base --clone-filter=blob:limit=10M && repo sync -c -j8
إنشاء مجموعة أدوات اختبار التوافق وتشغيلها
نفِّذ الأوامر التالية لإنشاء مجموعة أدوات اختبار التوافق وبدء وحدة تحكّم مجموعة أدوات اختبار التوافق التفاعلية:
إنشاء مجموعة أدوات اختبار التوافق (AOSP 14 أو الإصدارات الأقدم)
cd /path/to/android/rootsource build/envsetup.shmake cts -j32 TARGET_PRODUCT=aosp_arm64cts-tradefed
إنشاء مجموعة أدوات اختبار التوافق (AOSP 15)
cd /path/to/android/rootsource build/envsetup.shmake cts -j32 TARGET_PRODUCT=aosp_arm64 TARGET_RELEASE=target-release cts-tradefed
يُرجى الرجوع إلى الجدول التالي لاختيار قيمة target-release:
| غصن | الإصدار المستهدَف |
|---|---|
| android15-tests-dev | ap3a |
تشغيل مجموعة أدوات اختبار التوافق
في وحدة تحكّم مجموعة أدوات اختبار التوافق، أدخِل:
tf> run cts --plan CTS
كتابة اختبارات مجموعة أدوات اختبار التوافق
تستخدم اختبارات مجموعة أدوات اختبار التوافق JUnit وواجهات برمجة التطبيقات لاختبار Android. راجِع البرنامج التعليمي
اختبار
تطبيقك
والاختبارات الحالية ضِمن الدليل cts/tests.
تتّبع اختبارات مجموعة أدوات اختبار التوافق في الغالب الاصطلاحات نفسها المستخدَمة في اختبارات Android الأخرى.
يتم تشغيل مجموعة أدوات اختبار التوافق على العديد من الأجهزة المتاحة للبيع، لذا يجب أن تتّبع الاختبارات القواعد التالية:
- مراعاة أحجام الشاشات المختلفة واتجاهاتها وتخطيطات لوحة المفاتيح
- استخدام طرق واجهة برمجة التطبيقات العامة فقط بعبارة أخرى، تجنَّب جميع الفئات والطرق والحقول
التي تحمل التعليق التوضيحي
hide. - تجنُّب استخدام تخطيطات العرض أو الاعتماد على أبعاد مواد العرض التي قد لا تكون متوفّرة على بعض الأجهزة
- عدم الاعتماد على امتيازات المستخدم الجذر
إضافة تعليق توضيحي بلغة Java
إذا كان اختبارك يتحقّق من سلوك واجهة برمجة تطبيقات، أضِف التعليق التوضيحي @ApiTest إلى رمز الاختبار وأدرِج
جميع واجهات برمجة التطبيقات المعنيّة في الحقل apis. استخدِم التنسيق المناسب من بين الـ
أمثلة التالية:
| نوع واجهة برمجة التطبيقات | تنسيق التعليق التوضيحي | ملاحظات |
|---|---|---|
| الطريقة | android.example.ClassA#methodA |
حالة الاستخدام الأكثر شيوعًا |
| الطريقة مع القيم الرئيسية | android.example.ClassB#methodB(KeyA) |
استخدِم هذه الطريقة فقط عندما يستخدم اختبارك طريقة واجهة برمجة تطبيقات للتحقّق من صحة حقل، كما في هذا المثال. |
| الحقل | android.example.ClassC#FieldA |
استخدِم هذه الطريقة فقط عندما يتحقّق اختبارك من صحة حقل في واجهة برمجة تطبيقات مباشرةً، كما في هذا المثال. |
إذا كان اختبارك يتحقّق من أحد متطلبات مستند تعريف التوافق (CDD)، أضِف التعليق التوضيحي @CddTest إلى رقم تعريف المتطلب (بما في ذلك رقم تعريف قسم مستند تعريف التوافق ورقم تعريف المتطلب) في رمز اختبار مجموعة أدوات اختبار التوافق كما هو موضّح في المثال التالي. في رسالة الإتمام، أشر إلى متطلبات مستند تعريف معايير التوافق (CDD) التي يختبرها اختبارك من خلال الإشارة إلى أرقام تعريف متطلبات مستند تعريف معايير التوافق (CDD). تتكوّن أرقام تعريف متطلبات مستند تعريف معايير التوافق (CDD) من مزيج من رقم تعريف القسم ورقم تعريف المتطلب، ويفصل بينهما شرطة مائلة (/) كما في 7.3.1/C-1-1.
/**
* Verify Passpoint configuration management APIs for a Passpoint
* @throws Exception
*/
@CddTest(requirement="7.4.2.3/C-1-1,C-2-1")
public void testAddPasspointConfigWithUserCredential() throws Exception {
if (!WifiFeature.isWifiSupported(getContext())) {
// skip the test if WiFi is not supported
return;
} testAddPasspointConfig(generatePasspointConfig(generateUserCredential()));
}
بالنسبة إلى أداة التحقّق من مجموعة أدوات اختبار التوافق (CTS)، أضِف التعليق التوضيحي إلى كل نشاط في AndroidManifest.xml باستخدام رقم تعريف مستند تعريف معايير التوافق (CDD) ذي الصلة. تشبه تنسيقات حقول القيم تنسيقات التعليقات التوضيحية بلغة Java في
مجموعة أدوات اختبار التوافق. في رسالة الإتمام، أشر إلى متطلبات مستند تعريف معايير التوافق التي يتم فرضها من خلال الإشارة إلى رقم تعريف متطلبات مستند تعريف معايير التوافق.
<activity>
......
<!-- OPTIONAL: Add a meta data attribute to indicate CDD requirements. -->
<meta-data android:name="cdd_test" android:value="7.4.1/C-4-1" />
<!-- OPTIONAL: Add a meta data attribute to indicate APIs being tested. -->
<meta-data android:name="api_test"
android:value="com.example.MyClass#myMethod" />
<!-- OPTIONAL: Add a metadata attribute to indicate the reason why the test doesn't enforce any CDD requirement but still useful in CTS-V. -->
<meta-data android:name="non_compliance_test"
android:value="detailed reasons" />
</activity>
في رسالة الإتمام
أشِر بوضوح إلى سبب الحاجة إلى إضافة اختبارك، وأضِف روابط ذات صلة للحصول على الدعم. بالنسبة إلى اختبارات مجموعة أدوات اختبار التوافق الذي يطوّره المطوّرون ، أدرِج رابطًا يؤدي إلى اقتراح الاختبار الذي أنشأته في أداة تتبُّع المشاكل من Google كجزء من عملية إرسال مجموعة أدوات اختبار التوافق الذي يطوّره المطوّرون.
إنشاء خطة فرعية
على سبيل المثال، يمكنك إضافة ملف SubPlan.xml في android-cts/subplans على النحو التالي:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <SubPlan version="2.0"> <Entry include="CtsSystemIntentTestCases" /> <Entry include="CtsSystemUiHostTestCases" /> <Entry include="CtsSecurityHostTestCases android.security.cts.SELinuxHostTest#testAospFileContexts" /> <Entry include="CtsSecurityHostTestCases android.security.cts.SELinuxHostTest#testAospServiceContexts" /> </SubPlan>
لتشغيل الخطة الفرعية:
run cts --subplan aSubPlan
تنسيق إدخال الخطة الفرعية هو:
Include a module name as follows: <Entry include="MODULE_NAME" /> Include a package: <Entry include="MODULE_NAME PACKAGE_NAME" /> Include a class: <Entry include="MODULE_NAME PACKAGE_NAME.CLASS_NAME" /> Include an individual test: <Entry include="MODULE_NAME PACKAGE_NAME.CLASS_NAME#TEST_NAME" />
تسمية الاختبار وموقعه
تستهدف معظم حالات اختبار مجموعة أدوات اختبار التوافق فئة معيّنة في واجهة برمجة تطبيقات Android. تحمل هذه الاختبارات أسماء حزم Java تنتهي باللاحقة cts وأسماء فئات تنتهي باللاحقة Test. تتكوّن كل حالة اختبار من اختبارات متعددة، ويُجري كل اختبار عادةً طريقة معيّنة للفئة التي يتم اختبارها.
يتم ترتيب هذه الاختبارات في بنية دليل يتم فيها تجميع الاختبارات في فئات مختلفة، مثل "الأدوات" أو "طرق العرض".
على سبيل المثال، اختبار مجموعة أدوات اختبار التوافق لحزمة Java
android.widget.TextView هو
android.widget.cts.TextViewTest، ويكون اسم حزمة Java هو
android.widget.cts واسم الفئة هو
TextViewTest.
- اسم حزمة Java
اسم حزمة Java لاختبارات مجموعة أدوات اختبار التوافق هو اسم حزمة الفئة التي يختبرها الاختبار، متبوعًا بـ.cts. في مثالنا، سيكون اسم الحزمةandroid.widget.cts. - اسم الفئة
اسم الفئة لاختبارات مجموعة أدوات اختبار التوافق هو اسم الفئة التي يتم اختبارها مع إضافة "Test" في نهايتها. على سبيل المثال، إذا كان الاختبار يستهدفTextView، يجب أن يكون اسم الفئةTextViewTest. - اسم الوحدة (مجموعة أدوات اختبار التوافق v2 فقط)
تنظّم مجموعة أدوات اختبار التوافق v2 الاختبارات حسب الوحدة. عادةً ما يكون اسم الوحدة هو السلسلة الثانية من اسم حزمة Java (في مثالنا،widget).
تعتمد بنية الدليل ورمز نموذجي على ما إذا كنت تستخدم مجموعة أدوات اختبار التوافق v1 أو مجموعة أدوات اختبار التوافق v2.
مجموعة أدوات اختبار التوافق v1
بالنسبة إلى Android 6.0 أو الإصدارات الأقدم، استخدِم مجموعة أدوات اختبار التوافق v1. بالنسبة إلى مجموعة أدوات اختبار التوافق v1، يكون الرمز النموذجي في cts/tests/tests/example.
تبدو بنية الدليل في اختبارات مجموعة أدوات اختبار التوافق v1 على النحو التالي:
cts/
tests/
tests/
package-name/
Android.mk
AndroidManifest.xml
src/
android/
package-name/
SampleDeviceActivity.java
cts/
SampleDeviceTest.java
مجموعة أدوات اختبار التوافق v2
بالنسبة إلى Android 7.0 أو الإصدارات الأحدث، استخدِم مجموعة أدوات اختبار التوافق v2. لمعرفة التفاصيل، اطّلِع على نموذج الاختبار في مشروع مفتوح المصدر لنظام Android (AOSP).
تبدو بنية دليل مجموعة أدوات اختبار التوافق v2 على النحو التالي:
cts/
tests/
module-name/
Android.mk
AndroidManifest.xml
src/
android/
package-name/
SampleDeviceActivity.java
cts/
SampleDeviceTest.java
حِزم نماذج جديدة
عند إضافة اختبارات جديدة، قد لا يكون هناك دليل حالي لوضع اختبارك فيه. في هذه الحالات، عليك إنشاء الدليل ونسخ ملفات النماذج المناسبة.
مجموعة أدوات اختبار التوافق v1
إذا كنت تستخدم مجموعة أدوات اختبار التوافق v1، يُرجى الرجوع إلى المثال ضِمن cts/tests/tests/example وإنشاء دليل جديد. احرِص أيضًا على
إضافة اسم وحدة الحزمة الجديدة من Android.mk
إلى CTS_COVERAGE_TEST_CASE_LIST في
cts/CtsTestCaseList.mk. build/core/tasks/cts.mk يستخدم ملف makefile هذا
لدمج جميع الاختبارات وإنشاء حزمة مجموعة أدوات اختبار التوافق النهائية.
مجموعة أدوات اختبار التوافق v2
استخدِم نموذج الاختبار
/cts/tests/sample/
للبدء السريع في وحدة الاختبار الجديدة باتّباع الخطوات التالية:
- لإنشاء دليل الاختبار ونسخ ملفات النماذج، نفِّذ ما يلي:
mkdir cts/tests/module-name && cp -r cts/tests/sample/* cts/tests/module-name
- انتقِل إلى
cts/tests/module-nameواستبدِل كل مثيلات "[Ss]ample" باصطلاح التسمية المقترَح من أعلاه. - عدِّل
SampleDeviceActivityلتنفيذ الميزة التي تختبرها. - عدِّل
SampleDeviceTestللتأكّد من نجاح النشاط أو تسجيل أخطائه.
أدلة إضافية
يمكنك أيضًا إضافة أدلة Android أخرى، مثل assets وjni وlibs وres.
لإضافة رمز JNI، أنشِئ دليلاً في جذر المشروع بجانب src يتضمّن الرمز الأصلي وملف makefile Android.mk.
يحتوي ملف makefile عادةً على الإعدادات التالية:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libCtsSample_jni # don't include this package in any target LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := list of source code files LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) # Tag this module as a cts test artifact LOCAL_COMPATIBILITY_SUITE := cts LOCAL_SHARED_LIBRARIES := libnativehelper LOCAL_SDK_VERSION := current include $(BUILD_SHARED_LIBRARY)
ملف Android.mk
أخيرًا، عدِّل ملف Android.mk في جذر الـ
مشروع لإنشاء الرموز البرمجية الأصلية والاعتماد عليها، كما هو موضّح أدناه:
# All tests should include android.test.runner. LOCAL_JAVA_LIBRARIES := android.test.runner # Includes the jni code as a shared library LOCAL_JNI_SHARED_LIBRARIES := libCtsSample_jni # Include for InstrumentationCtsTestRunner LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner... LOCAL_SDK_VERSION := currentinclude $(BUILD_CTS_PACKAGE) #Tells make to look in subdirectories for more make files to include include $(call all-makefiles-under,$(LOCAL_PATH))
إصلاح الاختبارات أو إزالتها
بالإضافة إلى إضافة اختبارات جديدة، يمكنك إصلاح الاختبارات التي تحمل التعليق التوضيحي BrokenTest أو KnownFailure أو إزالتها.
إرسال تغييراتك
اتّبِع سير عمل إرسال تغييرات الرمز البرمجي عند المساهمة بتغييرات في مجموعة أدوات اختبار التوافق.
- اختَر فرع التطوير استنادًا إلى مستويات واجهة برمجة التطبيقات التي ينطبق عليها التصحيح.
- طوِّر التغييرات أو اختَرها وادمجها في فرع الاختبار الصحيح مع إضافة DO NOT MERGE أو RESTRICT AUTOMERGE في رسالة الإتمام.
يتم تعيين مراجع لمراجعة التغيير واختياره ودمجه في Gerrit الداخلي وفقًا لذلك.
الجدول الزمني لإصدار الفيديوهات ومعلومات الفرع
تتّبع إصدارات مجموعة أدوات اختبار التوافق هذا الجدول الزمني.
| الإصدار | مستوى واجهة برمجة التطبيقات | فرع التطوير | معدّل الإصدار |
|---|---|---|---|
| +16 | +36 | Gerrit الداخلي | ربع سنويًا |
| 15 | 35 | android15-tests-dev | ربع سنويًا |
| 14 | 34 | android14-tests-dev | ربع سنويًا |
| 13 | 33 | android13-tests-dev | ربع سنويًا |
تواريخ مهمة أثناء الإصدار
- نهاية الأسبوع الأول: تجميد الرمز البرمجي. يتم أخذ التغييرات التي تم دمجها في الفرع حتى تجميد الرمز البرمجي في الاعتبار للإصدار القادم من مجموعة أدوات اختبار التوافق. يتم أخذ عمليات الإرسال إلى الفرع بعد تجميد الرمز البرمجي أو بعد اختيار مرشّح للإصدار في الاعتبار للإصدار اللاحق.
- الأسبوع الثاني أو الثالث: يتم نشر مجموعة أدوات اختبار التوافق في صفحة تنزيلات مجموعة أدوات اختبار التوافق.
سير عمل الدمج التلقائي
تم إعداد فروع تطوير مجموعة أدوات اختبار التوافق بحيث يتم دمج التغييرات المُرسَلة إلى كل فرع تلقائيًا في الفروع الأعلى.
بالنسبة إلى التغييرات التي يتم إجراؤها مباشرةً على فرع تطوير اختبار AOSP، يكون مسار الدمج التلقائي:
android13-tests-dev >
android14-tests-dev >
android15-tests-dev
- بالنسبة إلى الإصدارات 16 والإصدارات الأحدث من مجموعة أدوات اختبار التوافق، سيختار المراجع التغيير ويدمجه في Gerrit الداخلي وفقًا لذلك.
إذا تعذّر دمج قائمة التغييرات بشكلٍ صحيح، يتم إرسال رسالة إلكترونية إلى مؤلّف التصحيح تتضمّن تعليمات حول كيفية حلّ التعارض. في معظم الحالات، يمكن لمؤلّف التصحيح استخدام التعليمات لتخطّي الدمج التلقائي لقائمة التغييرات المتعارضة.
إذا كان فرع أقدم يتطلّب التغيير، يجب اختيار التصحيح ودمجه من الفرع الأحدث.
بالنسبة إلى تغييرات الاختبارات التي تنطبق على إصدار Android التالي، بعد تحميل تغيير مقترَح، تراجعه Google، وإذا تم قبوله، ستختاره وتدمجه في Gerrit الداخلي.