按照说明获取和构建Android源代码,当使用repo init
命令时,需要为CTS分支指定一个特定的名称,例如-b android-5.0_r2
。这样CTS的修改才会下当前以及之后的版本生效。
执行以下命令来构建CTS和启动交互式CTS控制台:
提示:使用AOSP x86_64的或AOSP MIPS来指定TARGET_PRODUCT,用于搭建不同的架构:
`cd /path/to/android/root
make cts -j32 TARGET_PRODUCT=aosp_arm64
cts-tradefed`
在cts-tf控制台中输入:
run cts --plan CTS
CTS测试使用JUnit和Android Test API。如果要执行cts/tests
目录下的测试用例,请先参照文档Testing and Instrumentation,cts测试大部分遵从以下条件:
* 必须考虑到不同的屏幕大小,方向,和键盘布局。
* 仅使用公共API方法。避免使用所有加上hide
注解的的类,方法和字段。
* 避免依赖于特定视图布局或依赖于特定的尺寸资源。
* 不要依赖root权限
大多数CTS测试用例都是针对Android API中的某个类而言的。这些测试的包名统一使用cts作为后缀,测试类统一使用Test所为后缀。每一个测试用例包含一系列的测试项,每一项通常用来测试API的方法或者类。这些测试均按文件夹分类存放(比如widget或者views)
比如,存放在目录cts/tests/tests/widget/src/android/widget/cts
下的android.widget.cts.TextViewTest
是针对android.widget.TextView
类的cts测试,测试包的名称为android.widget.cts
,测试类的名称为TextViewTest
。TextViewTest
类中的testSetText
方法用于测试setText方法,testSetSingleLine
方法用于测试setSingleLine方法每项测试都加上了@TestTargetNew
的注解,用于表面涵盖哪些测试。
一些cts测试虽然也放在相关的包中但是并不是直接用于API类的测试,
例如,在CTS测试,在android.net.cts
包下的android.net.cts.ListeningPortsTest
,虽然并没有对应的被测试类android.net.ListeningPorts
,但因为它是与网络相关的,所以依然也存放到该包下。您还可以根据需要创建一个新的测试包。例如,有一个android.security
测试包为与安全相关的测试。因此,添加新的测试时,尽量根据这种方法去命名和存放你的测试包。
最后,虽然很多的测试都使用@TestTargets和@TestTargetNew进行注解。但对于新添加的测试而言,并没有必要去添加这些注解。
在新建一个测试包的时候,也许当前并没有对应的目录存放你的测试包,这种情况下,需要参照cts/tests/tests/example
中的样例去新建一个目录。
此外,请务必确保将新包的模块名已经添加到cts/CtsTestCaseList.mk
文件的CTS_COVERAGE_TEST_CASE_LIST
中,
这个Makefile被build/core/tasks/cts.mk
调用,最后将所有测试合并以创建最终的CTS包。
除了添加新的测试意外,通过注解BrokenTest或KnownFailure修改或去除测试。
按照Submitting Patches workflow提交cts的修改,提交前需要对你的修改进行审视。
cts的发布需要遵从以下时间安排:
提示:这个时间安排只是暂定的,随时都可能更新。
Version | Branch | Frequency |
---|---|---|
6.0 | marshmallow-cts-dev | Monthly |
5.1 | lollipop-mr1-cts-dev | Monthly |
5.0 | lollipop-cts-dev | Monthly |
4.4 | kitkat-cts-dev | No releases planned |
4.3 | jb-mr2-cts-dev | No releases planned |
4.2 | jb-mr1.1-cts-dev | No releases planned |
CTS分支开发中,每个分支的更改会自动合并:
jb-dev-> jb-mr1.1-cts-dev -> jb-mr2-cts-dev -> kitkat-cts-dev -> lollipop-cts-dev -> lollipop-mr1-cts-dev ->
如果变更列表(CL)没有正确合并时,CL的作者将收到一封冲突解决说明的电子邮件。在大多数的情况下,CL的作者可以使用该说明解决合并时的冲突。