เริ่มต้นไคลเอ็นต์ที่เก็บ
ทำตามคำแนะนำจากการดาวน์โหลดแหล่งที่มาเพื่อรับ
และสร้างซอร์สโค้ด 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 Testing API ตรวจสอบ
ทดสอบ
แอปของคุณ
และการทดสอบที่มีอยู่ในไดเรกทอรี 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 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 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 คือ ชื่อของคลาสที่กำลังทดสอบด้วย "การทดสอบ" ต่อท้าย สำหรับ ตัวอย่างเช่น หากการทดสอบกำหนดเป้าหมายเป็นTextView
ชื่อคลาสควรเป็นTextViewTest
- ชื่อโมดูล (CTS v2 เท่านั้น)
CTS v2 จัดระเบียบการทดสอบตามโมดูล ชื่อโมดูลมักจะเป็นสตริงที่สองของชื่อแพ็กเกจ 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 เวอร์ชัน 2
สำหรับ 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
ใช้ไฟล์รูปแบบนี้
เพื่อรวมการทดสอบทั้งหมดและสร้างแพ็กเกจ CTS สุดท้าย
CTS เวอร์ชัน 2
ใช้การทดสอบตัวอย่าง
/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
ด้วยโฆษณาเนทีฟ
และมีไฟล์ประเภท Android.mk
อยู่ในนั้น
โดยปกติไฟล์จะมีการตั้งค่าต่อไปนี้
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 เฉพาะ ให้พัฒนาหรือเลือกเฉพาะ การเปลี่ยนแปลงใน Branch ทดสอบที่ถูกต้องโดยมี DO NOT Merge หรือ จำกัดอัตโนมัติในข้อความคอมมิต
ทำตามเวิร์กโฟลว์การส่งแพตช์เพื่อมีส่วนร่วมในการเปลี่ยนแปลง CTS เราจะกำหนดให้ผู้ตรวจสอบตรวจสอบการเปลี่ยนแปลงของคุณตามนั้น
กําหนดการเผยแพร่และข้อมูลสาขา
โดย CTS จะปล่อยตามกำหนดการนี้
เวอร์ชัน | ระดับ API | สาขา | ความถี่ |
---|---|---|---|
15 | 35 | Android15-tests-dev | รายไตรมาส |
14 | 34 | Android14-tests-dev | รายไตรมาส |
13 | 33 | Android13-tests-dev | รายไตรมาส |
12 ลิตร | 32 | Android12L-tests-dev | รายไตรมาส |
12 | 31 | Android12-tests-dev | รายไตรมาส |
กำหนดการที่สำคัญระหว่างการเปิดตัว
- สิ้นสุดสัปดาห์แรก: โค้ดค้าง รวมการเปลี่ยนแปลงใน Branch แล้ว จนกว่าจะมีการระงับโค้ดสำหรับ 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 ที่ขัดแย้งกัน
หากสาขาที่เก่ากว่าต้องมีการเปลี่ยนแปลง แพตช์นั้นจะต้อง เลือก cherry จากสาขาที่ใหม่กว่า