เริ่มต้นไคลเอ็นต์ 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 แบบอินเทอร์แอกทีฟ
บิลด์ CTS (AOSP 14 หรือเก่ากว่า)
cd /path/to/android/root
source build/envsetup.sh
make cts -j32 TARGET_PRODUCT=aosp_arm64
cts-tradefed
บิลด์ CTS (AOSP 15 ขึ้นไป)
cd /path/to/android/root
source build/envsetup.sh
make cts -j32 TARGET_PRODUCT=aosp_arm64 TARGET_RELEASE=
target-release cts-tradefed
โปรดดูตารางต่อไปนี้เพื่อเลือกค่า target-release
สาขา | เวอร์ชันเป้าหมาย |
---|---|
android15-tests-dev | ap3a |
ในคอนโซล CTS ให้ป้อนข้อมูลต่อไปนี้
tf> run cts --plan CTS
เขียนการทดสอบ CTS
ก่อนการทดสอบ CTS ใช้ JUnit และ API การทดสอบของ Android ตรวจสอบบทแนะนำทดสอบแอปและการทดสอบที่มีอยู่ในส่วนไดเรกทอรี cts/tests
การทดสอบ CTS ส่วนใหญ่เป็นไปตามรูปแบบเดียวกับที่ใช้กับการทดสอบอื่นๆ ของ Android
CTS ทำงานในอุปกรณ์เวอร์ชันที่ใช้งานจริงหลายรุ่น ดังนั้นการทดสอบจึงต้องเป็นไปตามกฎต่อไปนี้
- พิจารณาขนาด การวางแนว และเลย์เอาต์แป้นพิมพ์ของหน้าจอที่หลากหลาย
- ใช้เฉพาะเมธอด API สาธารณะ กล่าวคือ หลีกเลี่ยงคลาส วิธีการ และฟิลด์ทั้งหมดที่มีคำอธิบายประกอบ
hide
- หลีกเลี่ยงการใช้เลย์เอาต์มุมมองหรือใช้ขนาดของชิ้นงานที่อาจไม่แสดงในอุปกรณ์บางรุ่น
- อย่าพึ่งพาสิทธิ์รูท
เพิ่มคำอธิบายประกอบ Java
หากการทดสอบยืนยันลักษณะการทํางานของ API ให้ใส่คำอธิบายประกอบโค้ดทดสอบด้วย @ApiTest
และแสดงรายการ API ทั้งหมดที่เกี่ยวข้องในช่อง apis
ใช้รูปแบบที่เหมาะสมจากตัวอย่างต่อไปนี้
ประเภท API | รูปแบบคำอธิบายประกอบ | หมายเหตุ |
---|---|---|
วิธีการ | android.example.ClassA#methodA |
Use Case ที่พบบ่อยที่สุด |
เมธอดที่มีคีย์-ค่า | android.example.ClassB#methodB(KeyA) |
ใช้เฉพาะในกรณีที่การทดสอบใช้เมธอด API เพื่อตรวจสอบฟิลด์ ดังในตัวอย่างนี้ |
ช่อง | android.example.ClassC#FieldA | ใช้เฉพาะในกรณีที่การทดสอบตรวจสอบฟิลด์ API โดยตรง ดังในตัวอย่างนี้ |
หากการทดสอบยืนยันข้อกําหนด 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 ให้ใส่คำอธิบายประกอบกิจกรรมแต่ละรายการใน 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 Issue Tracker เป็นส่วนหนึ่งของกระบวนการส่ง 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 API การทดสอบเหล่านี้มีชื่อแพ็กเกจ 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 คือชื่อคลาสที่ทดสอบโดยต่อท้ายด้วย "Test" เช่น หากการทดสอบกําหนดเป้าหมายเป็นTextView
ชื่อชั้นเรียนควรเป็นTextViewTest
- ชื่อโมดูล (CTS v2 เท่านั้น)
CTS v2 จัดระเบียบการทดสอบตามโมดูล โดยปกติแล้วชื่อโมดูลจะเป็นสตริงที่ 2 ของชื่อแพ็กเกจ Java (ในตัวอย่างของเราคือwidget
)
โครงสร้างไดเรกทอรีและโค้ดตัวอย่างจะขึ้นอยู่กับว่าคุณใช้ CTS v1 หรือ CTS v2
CTS v1
สำหรับ Android 6.0 หรือต่ำกว่า ให้ใช้ CTS v1 สำหรับ CTS v1 โค้ดตัวอย่างจะอยู่ที่นี่
cts/tests/tests/example
โครงสร้างไดเรกทอรีในการทดสอบ CTS v1 มีลักษณะดังนี้
cts/ tests/ tests/ package-name/ Android.mk AndroidManifest.xml src/ android/ package-name/ SampleDeviceActivity.java cts/ SampleDeviceTest.java
CTS v2
สำหรับ Android 7.0 ขึ้นไป ให้ใช้ CTS v2 โปรดดูรายละเอียดที่การทดสอบตัวอย่างในโครงการโอเพนซอร์ส Android (AOSP)
โครงสร้างไดเรกทอรี CTS v2 มีลักษณะดังนี้
cts/ tests/ module-name/ Android.mk AndroidManifest.xml src/ android/ package-name/ SampleDeviceActivity.java cts/ SampleDeviceTest.java
แพ็กเกจตัวอย่างใหม่
เมื่อเพิ่มการทดสอบใหม่ อาจมีไดเรกทอรีที่มีอยู่ไม่เพียงพอที่จะใส่การทดสอบ ในกรณีดังกล่าว คุณต้องสร้างไดเรกทอรีและคัดลอกไฟล์ตัวอย่างที่เหมาะสม
CTS v1
หากคุณใช้ CTS v1 โปรดดูตัวอย่างในส่วน cts/tests/tests/example
แล้วสร้างไดเรกทอรีใหม่ นอกจากนี้ ให้ตรวจสอบว่าได้เพิ่มชื่อโมดูลของแพ็กเกจใหม่จาก Android.mk
ไปจนจบที่ CTS_COVERAGE_TEST_CASE_LIST
ใน cts/CtsTestCaseList.mk
build/core/tasks/cts.mk
ใช้ไฟล์ makefile นี้เพื่อรวมการทดสอบทั้งหมดและสร้างแพ็กเกจ CTS สุดท้าย
CTS 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
ที่มีโค้ดเนทีฟและไฟล์ 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 ให้เลือกสาขาการพัฒนาตามระดับ API ที่แพตช์มีผล
-
สำหรับการเปลี่ยนแปลงที่มีผลกับ API หลายระดับ ให้พัฒนาแพตช์ใน
aosp/main
ก่อน แล้วเลือกเฉพาะรายการที่ต้องการไปยังสาขาการทดสอบที่อัปสตรีมมากที่สุด อนุญาตให้เครื่องมือผสานอัตโนมัติผสานการเปลี่ยนแปลงในสาขาทดสอบ AOSP ดูรายการสาขาและข้อมูลเส้นทางการผสานอัตโนมัติได้ที่กำหนดการเผยแพร่และข้อมูลสาขา - สำหรับการเปลี่ยนแปลงที่มีผลกับ API ระดับหนึ่งๆ โดยเฉพาะ ให้พัฒนาหรือเลือกการเปลี่ยนแปลงที่ต้องการไปยังสาขาทดสอบที่ถูกต้องโดยใส่อย่าผสานหรือจำกัดการผสานอัตโนมัติในข้อความคอมมิต
ทำตามเวิร์กโฟลว์การส่งแพตช์เพื่อมีส่วนร่วมในการเปลี่ยนแปลง CTS ระบบจะมอบหมายผู้ตรวจสอบให้ตรวจสอบการเปลี่ยนแปลงของคุณตามความเหมาะสม
กำหนดการเผยแพร่และข้อมูลสาขา
การเผยแพร่ CTS จะเป็นไปตามกำหนดการนี้
เวอร์ชัน | ระดับ API | สาขา | ความถี่ |
---|---|---|---|
15 | 35 | android15-tests-dev | รายไตรมาส |
14 | 34 | android14-tests-dev | รายไตรมาส |
13 | 33 | android13-tests-dev | รายไตรมาส |
12L | 32 | android12L-tests-dev | รายไตรมาส |
12 | 31 | android12-tests-dev | รายไตรมาส |
วันที่สำคัญระหว่างการเผยแพร่
- สิ้นสุดสัปดาห์แรก: ไม่มีการแก้ไขโค้ด การเปลี่ยนแปลงที่ผสานในสาขาจะได้รับการพิจารณาสำหรับ CTS เวอร์ชันที่กำลังจะเปิดตัวจนกว่าจะมีการหยุดโค้ด การส่งไปยังสาขาหลังจากหยุดแก้ไขโค้ดแล้ว หรือหลังจากเลือกผู้สมัครสำหรับรุ่นแล้ว ระบบจะพิจารณาการส่งดังกล่าวสำหรับรุ่นถัดไป
- สัปดาห์ที่ 2 หรือ 3: 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) ไม่สำเร็จ ระบบจะส่งอีเมลพร้อมวิธีการแก้ไขข้อขัดแย้งไปยังผู้เขียนแพตช์ ในกรณีส่วนใหญ่ ผู้เขียนแพตช์สามารถใช้วิธีการเพื่อข้ามการผสาน CL ที่ขัดแย้งกันโดยอัตโนมัติ
หากสาขาเก่าจำเป็นต้องมีการเปลี่ยนแปลง ก็จะต้องเลือกแพตช์จากสาขาที่ใหม่กว่า