إعداد برنامج Repo
اتّبِع التعليمات الواردة في مقالة تنزيل المصدر للحصول على
وإنشاء رمز المصدر لنظام Android عند إصدار الأمر repo init
، حدِّد
فرع CTS المحدد باستخدام -b
. يضمن ذلك تضمين تغييرات CTS الخاصة بك.
في إصدارات CTS اللاحقة.
يعرض الرمز في المثال التالي طريقة استخدام "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
إنشاء CTS وتشغيلها
نفذ الأوامر التالية لإنشاء CTS وبدء استخدام وحدة تحكّم CTS:
cd /path/to/android/root
make cts -j32 TARGET_PRODUCT=aosp_arm64
cts-tradefed
في وحدة تحكم CTS، أدخل:
tf> run cts --plan CTS
كتابة اختبارات CTS
تستخدم اختبارات CTS JUnit وواجهات برمجة تطبيقات اختبار Android. مراجعة
الاختبار
تطبيقك
البرنامج التعليمي والاختبارات الحالية ضمن دليل cts/tests
.
تتبع اختبارات CTS في الغالب الاصطلاحات نفسها المستخدمة في اختبارات Android الأخرى.
تعمل CTS على العديد من أجهزة الإنتاج، لذلك يجب أن تتبع الاختبارات القواعد التالية:
- يجب مراعاة الأحجام المختلفة للشاشة والاتجاهات وتخطيطات لوحة المفاتيح.
- استخدام طرق واجهة برمجة التطبيقات العامة فقط. بمعنى آخر، تجنب جميع الفئات والطرق والحقول
مع التعليق التوضيحي
hide
. - تجنُّب استخدام تنسيقات العرض أو الاعتماد على أبعاد مواد العرض التي قد لا تكون متوفرة على بعض الأجهزة.
- لا تعتمد على امتيازات الجذر.
إضافة تعليق توضيحي لـ Java
إذا كان الاختبار يتأكد من صحة سلوك واجهة برمجة التطبيقات، يُرجى إضافة تعليقات توضيحية إلى رمز الاختبار باستخدام @ApiTest
وإدراج.
جميع واجهات برمجة التطبيقات المضمنة في الحقل apis
. استخدم التنسيق المناسب من بين
في ما يلي الأمثلة:
نوع واجهة برمجة التطبيقات | تنسيق التعليق التوضيحي | ملاحظات |
---|---|---|
الطريقة | android.example.ClassA#methodA |
تمثّل هذه السمة حالة الاستخدام الأكثر شيوعًا. |
الطريقة باستخدام القيم الرئيسية | android.example.ClassB#methodB(KeyA) |
لا تُستخدم إلا عندما يستخدم الاختبار طريقة واجهة برمجة التطبيقات للتحقق من صحة حقل، كما في هذا المثال |
الحقل | android.example.ClassC#FieldA | لا تُستخدم إلا عندما يتحقّق الاختبار من صحة أحد حقول واجهة برمجة التطبيقات مباشرةً، كما في هذا المثال |
إذا أثبت الاختبار صحة متطلبات CDD، أضِف تعليقًا توضيحيًا إلى رقم تعريف المتطلبات (بما في ذلك قسم CDD).
رقم التعريف ومعرّف المطالبة) مع @CddTest
في رمز اختبار CTS كما هو موضّح في
المثال التالي. في رسالة الالتزام، اذكر متطلبات 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 Verifier، يمكنك إضافة تعليقات توضيحية إلى كل نشاط في AndroidManifest.xml
باستخدام
معرّف CDD ذي الصلة. تشبه تنسيقات حقول القيم تنسيقات تعليقات Java التوضيحية في
مجموعة أدوات اختبار الاتصال (CTS). في رسالة الإتمام، اذكر متطلبات CDD التي يتم فرضها من خلال الرجوع إلى مستند CDD.
معرّف المتطلبات.
<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>
في رسالة الإتمام
اذكر بوضوح سبب الحاجة إلى إضافة الاختبار، وأضف الروابط ذات الصلة للدعم. لـ CTS-D قم بتضمين رابط لاقتراح الاختبار الذي أنشأته في أداة تتبع المشاكل من Google كجزء من عملية إرسال CTS-D.
إنشاء خطة فرعية
على سبيل المثال، يمكنك إضافة ملف 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" />
اختبار التسمية والموقع
تستهدف معظم حالات اختبار CTS فئة معيّنة في واجهة برمجة تطبيقات Android. هذه الاختبارات
لها أسماء حزم Java مع اللاحقة cts
وأسماء الفئات مع
اللاحقة Test
. تتكون كل حالة اختبار من عدة اختبارات، حيث تكون كل حالة منها عبارة عن
الاختبار عادةً طريقة معينة للفئة التي يتم اختبارها.
يتم ترتيب هذه الاختبارات في هيكل دليل حيث يتم تجميع الاختبارات في
فئات مختلفة مثل "التطبيقات المصغّرة" أو "المشاهدات".
على سبيل المثال، اختبار CTS لحزمة Java
android.widget.TextView
هو
android.widget.cts.TextViewTest
باسم حزمة Java
android.widget.cts
واسم الفئة كـ
TextViewTest
- اسم حزمة Java
اسم حزمة Java لاختبارات CTS هو اسم حزمة الفئة التي يختبرها الاختبار، متبوعًا.cts
على سبيل المثال، سيكون اسم الحزمةandroid.widget.cts
- اسم الصف
اسم الفئة في اختبارات CTS هو اسم الفئة التي يتم اختبارها باستخدام كلمة "اختبار" ملحق. بالنسبة على سبيل المثال، إذا كان الاختبار يستهدفTextView
، يجب أن يكون اسم الفئةTextViewTest
- اسم الوحدة (الإصدار 2 من CTS فقط)
ينظّم الإصدار CTS v2 الاختبارات حسب الوحدة. يكون اسم الوحدة عادةً هو السلسلة الثانية من اسم حزمة Java (في مثلwidget
).
تعتمد بنية الدليل ونموذج الرمز على ما إذا كنت تستخدم الإصدار 1 من CTS. أو الإصدار 2 من CTS.
الإصدار 1 من CTS
بالنسبة إلى Android 6.0 أو الإصدارات الأقدم، استخدِم الإصدار CTS v1. بالنسبة إلى CTS الإصدار 1، يكون نموذج الرمز في
cts/tests/tests/example
تبدو بنية الدليل في اختبارات الإصدار 1 من CTS على النحو التالي:
cts/ tests/ tests/ package-name/ Android.mk AndroidManifest.xml src/ android/ package-name/ SampleDeviceActivity.java cts/ SampleDeviceTest.java
الإصدار 2 من CTS
إذا كنت تستخدم الإصدار 7.0 من نظام Android أو إصدارًا أحدث، استخدِم الإصدار 2 من CTS. للحصول على التفاصيل، يمكنك مراجعة اختبار نموذجي في "المشروع المفتوح المصدر لنظام Android" (AOSP)
تبدو بنية دليل CTS v2 على النحو التالي:
cts/ tests/ module-name/ Android.mk AndroidManifest.xml src/ android/ package-name/ SampleDeviceActivity.java cts/ SampleDeviceTest.java
نماذج حِزم جديدة
عند إضافة اختبارات جديدة، قد لا يكون هناك دليل حالي لوضع الاختبار. في هذه الحالات، يجب إنشاء الدليل ونسخ نماذج الملفات المناسبة.
الإصدار 1 من CTS
إذا كنت تستخدم الإصدار 1 من CTS، فراجع المثال أدناه
cts/tests/tests/example
وأنشِئ دليلاً جديدًا. كذلك،
احرص على إضافة اسم وحدة الحزمة الجديدة من Android.mk
الخاصة بها.
إلى CTS_COVERAGE_TEST_CASE_LIST
بوصة
cts/CtsTestCaseList.mk
يستخدم build/core/tasks/cts.mk
ملف التصميم هذا.
لدمج جميع الاختبارات وإنشاء حزمة CTS النهائية.
الإصدار 2 من CTS
استخدام الاختبار النموذجي
/cts/tests/sample/
للبدء السريع لوحدة الاختبار الجديدة بالخطوات التالية:
- لإنشاء دليل الاختبار ونسخ نماذج الملفات، شغِّل:
mkdir cts/tests/module-name && cp -r cts/tests/sample/* cts/tests/module-name
- الانتقال إلى
cts/tests/module-name
واستبدال جميع مثيلات "[Ss]واسع" مع اصطلاح تسمية موصى به من أعلاه. - يُرجى تحديث "
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
إرسال التغييرات
عند إرسال تصحيحات CTS أو VTS في AOSP، اختر فرع التطوير بناءً على مستويات واجهة برمجة التطبيقات التي ينطبق عليها رمز التصحيح.
-
بالنسبة إلى التغييرات التي تنطبق على مستويات متعددة لواجهة برمجة التطبيقات، أولاً
تطوير رمز في
aosp/main
ثم اختيار الأكثر فرع الاختبار. السماح للدمج التلقائي بدمج التغييرات في المراحل اللاحقة في فروع اختبار AOSP. عرض جدول الإصدار ومعلومات الفرع لقائمة فروع المسارات ودمجها تلقائيًا. - بالنسبة إلى التغييرات الخاصة بمستوى معين من واجهة برمجة التطبيقات، يمكنك تطوير إجراء التغييرات على فرع الاختبار الصحيح باستخدام عدم الدمج أو تقييد تلقائيًا في رسالة التنفيذ
اتّبِع الخطوات الموضّحة في مقالة سير عمل إرسال رموز التصحيح. للمساهمة في التغييرات في CTS. سيتم تكليف أحد المراجعين لمراجعتها بناءً على ذلك.
الجدول الزمني لإصدار الفيديوهات ومعلومات الفرع
تتوافق إصدارات CTS مع هذا الجدول الزمني.
الإصدار | مستوى واجهة برمجة التطبيقات | Branch | التردد |
---|---|---|---|
15 | 35 | تطوير اختبار android15 | ربع سنوي |
14 | 34 | تطوير اختبار android14 | ربع سنوي |
13 | 33 | تطوير اختبار android13 | ربع سنوي |
12L | 32 | android12L-tests-dev | ربع سنوي |
12 | 31 | تطوير اختبار android12 | ربع سنوي |
التواريخ المهمة خلال الإصدار
- نهاية الأسبوع الأول: تجميد الرموز. تم دمج التغييرات في الفرع حتى يتم النظر في تجميد الرمز للإصدار القادم من CTS. عمليات الإرسال إلى الفرع بعد تجميد الرمز أو بعد المرشح إصداره الذي تم اختياره، فلا يزال في الاعتبار للإصدار اللاحق.
- الأسبوع الثاني أو الثالث: يتم نشر CTS في AOSP:
تدفق الدمج التلقائي
تعيين فروع تطوير CTS بحيث يتم تقديم التغييرات إلى كل يندمج تلقائيًا إلى فروع أعلى.
بالنسبة إلى التغييرات مباشرةً في فرع مطوّر اختبار AOSP، مسار الدمج التلقائي هو:
android11-tests-dev
android12-tests-dev
android12L-tests-dev
>
android13-tests-dev
android14-tests-dev
android15-tests-dev
aosp-main
بالنسبة إلى التغييرات التي يتم إجراؤها على إصدار Android التالي فقط، يكون مسار الدمج التلقائي هو:
aosp-main
<Internal git_main>
إذا فشل دمج قائمة التغييرات (CL) بشكل صحيح، فسيتم إرسال مؤلف التصحيح رسالة بريد إلكتروني تتضمن إرشادات حول كيفية حل التعارض. في معظم يمكن لمؤلف التصحيح استخدام التعليمات لتخطي عملية دمج قائمة التصنيف المتضاربة.
إذا كان الفرع الأقدم يتطلب التغيير، فيجب إزالة اللاصقة التي يتم انتقاؤها من الفرع الأحدث.