AndroidTV CTS/VTS/GTS/STS

AndroidTV出口海外需Google test认证,Google提供CTS、VTS等测试套件。介绍了各套件用途,如CTS测App和framework兼容性。还说明了验证CTS的方式、准备步骤、测试命令,以及测试中adb断线处理、豁免项目、特殊测项处理等内容,强调要排查测试出错原因以通过测试出报告。

AndroidTV出口海外市场需要google test认证,Google为AndroidTV开发商准备了一系列的测试套件,用于提高app/framework/hal的相容性,进一步提升开发者/用户体验。对于开发者来说就是需要测试-解决-测试相关module fail项,除了google waive项之外,其余的fail issue全都要解决:不管用什么的方式(不能修改原始套件)。

CTS:Compatibility Test Suite,用于测试App和framework的兼容性。

VTS:Vendor Test Suite,向上用于测试与framework相容,向下测试与OS kernel的相容性。 

GTS:Google Mobile Service Test suite,测试google GMS相关服务的套件。

STS:Security Test Suite,主要用于测试Android Security Pacth是否有生效。

CTS Verifier:CTS的补充,需要手动验证。(相机、传感器、蓝牙等)

根据现有环境和需求:atest和am instrument是验证CTS的另2种方式,但没CTS tool强大,

Google atest的使用_fchyang的博客-优快云博客_atest

使用am instrument验证CTS问题_fchyang的博客-优快云博客_instrument -e class

准备步骤

参照: CTS/VTS/GTS Host端服务器安装配置_fchyang的博客-优快云博客,//搭建服务器,安装相关tool。

官网:https://source.android.google.cn/compatibility/cts,//相关知识介绍,不同版本套件下载,测试命令等 都可以去看看

  • CTS:AndroidP r7套件有321 modules,
  • VTS:AndroidP r7套件有107 modules(VtsHalSensorsV1_0Target waive),
  • CTS-On-GSI:和VTS用同一个套件,有312 modules,
  • GTS:AndroidP r4版本有78 modules,
  • STS:AndroidP r4版本有3 modules。

怎么测试:以cts为例,相应的准备工作有哪些?

1、Bootcode

  • 设定不同的mac地址,以免相同mac造成地址冲突。
  • 不同方案的平台可能不同,根据需要设定,系统跑起来之后不能发生睡眠(cts往往跑几十个小时是有的,而且中间不能发生断电、待机等)

2、UI的设定:

  • Settings -> Device Preferences -> About -> Build   : 连续按 7 次 显示 Developer options 启动,不用再按
  • Settings ->Device Preferences -> Developer options -> Stay awake -> enable
  • Settings ->Device Preferences -> Developer options -> USB debugging -> enable 
  • Settings -> Device Preferences -> Screen saver -> Turn screen off
  • Settings -> Device Preferences -> Location -> Location status -> Use Wi-Fi to estimate location -> 确认同意

3、开一个终端输入: watch -n 1 adb connect “ip”,首先要确认device已经在线,这个命令每隔1s去检查adb是否有断线,断线的话自动连上。另开一个终端,从官网上下载相应Android版本的套件进行解压,cd android-cts/tools$ ./cts-tradefed 运行就进入测试shell环境,紧接着就可以输入测试命令,测试命令官网上都能找得到,可以help all看看。

  • 进行整个fullTest:run cts -s "ip":5555 --exclude-filter “moduleName”
  • 测试一个module:run cts -s "ip":5555 -m "moduleName"
  • 测试一个module其中的某一个testcase:run cts -s "ip":5555 -m module -t "testCase"
  • 多个devices进行一起测试,比如4台设备(前提最好知道这4台设备的ip地址):run cts -s “ip1”:5555 -s "ip2":5555 -s "ip3":5555 -s "ip4":5555 --shard-count 4 --exclude-filter "moduleName" 
  • 测试一个module,但是不想跑这个module的某个class,比如:run cts -s ip1:5555 -m CtsNetTestCases --exclude-filter "CtsNetTestCases android.net.cts.Ikev2VpnTest"
  • retry的时候,可以加--retry-type NOT_EXECUTED or FAILED,会重试之前会话中未执行的测试or失败的测项
  • 更多命令参考:https://source.android.com/docs/compatibility/cts/command-console-v2

如果测试过程中adb断线的话,测试大概率会fail,会出现找不到device,或是broken pipe等错误,通常连上adb 重测就会pass。

要跑完所有module,进行fulltest可执行如下command:run cts -s 192.168.1.106:5555 --exclude-filter CtsHostsideNetworkTests --skip-preconditions --skip-device-info ,fulltest之后会在android-cts/results/2019.06.11_10.31.21/test_result_failures.html,可以用浏览器打开看看。相应的log在android-cts/logs/2019.06.11_10.31.21/下面。(2019.06.11_10.31.21 这个是跑测试开始的时间,每次测试都会不同)

PS:ip是指测试设备的ip地址(比如192.168.1.106),可以用ifconfig or ip a 查看Ethernet的地址。--exclude-filter是测试的时候排除某个module。比如你想排查某个module是否有干扰因素,可以用exclude-filter。(如果已知局域网就连了4台设备,也可以去掉-s ip:5555,直接用run cts --shard-count 4即可,最多试过6个平台一起跑,没确认上限是多少)。--skip-preconditions --skip-device-info则是跳过收集device信息及条件检查等工作,减少了一点测试时间,单测一条case可以加上,全跑的话不建议加上。

下面罗列的1、2、3是指CTS/GTS/CTSGSi google认为可以豁免waive的项目(芯片方案商向google报备,申请豁免id)

1、CTS需要waive的项目

armeabi-v7a CtsHostsideNetworkTests
TestResultDetails
com.android.cts.net.HostsideVpnTests#testAppDisallowed

fail

java.lang.AssertionError: Failed to successfully run device tests for com.android.cts.net.hostside: Test run failed to complete. Expected 1 tests, received 0

com.android.cts.net.HostsideVpnTests#testDefault

fail

java.lang.AssertionError: Failed to successfully run device tests for com.android.cts.net.hostside: Test run failed to complete. Expected 1 tests, received 0

armeabi-v7a CtsSecurityTestCases
TestResultDetails
android.security.cts.EncryptionTest#testEncryption

fail

junit.framework.AssertionFailedError: Device encryption is required

armeabi-v7a CtsViewTestCases
TestResultDetails
android.view.cts.PixelCopyTest#testDialogProducer

fail

java.lang.AssertionError: Top edge; expected=ffffff00, actual=ff99a124

2、GTS需要waive的项目

armeabi-v7a GtsAssistantHostTestCases
TestResultDetails
com.google.android.assistant.gts.AssistantTest#testAssistantOpenFrontCamera

fail

java.lang.AssertionError

com.google.android.assistant.gts.AssistantTest#testAssistantOpenRearCamera

fail

java.lang.AssertionError

com.google.android.assistant.gts.AssistantTest#testAssistantTakePhotoWithoutVoiceInteraction

fail

java.lang.AssertionError

com.google.android.assistant.gts.AssistantTest#testAssistantTakeSelfieWithoutVoiceInteraction

fail

java.lang.AssertionError

armeabi-v7a GtsPermissionTestCases
TestResultDetails
com.google.android.permission.gts.PackageInstallerComponentTest#testPackageInstallerVersion

fail

java.lang.RuntimeException: PackageInstaller expected version >= 5218085, Please check.

3、CTS-On-GSI需要waive的项目

armeabi-v7a CtsBluetoothTestCases
TestResultDetails
android.bluetooth.cts.BluetoothLeScanTest#testBasicBleScan

fail

junit.framework.AssertionFailedError: Scan results shouldn't be empty

android.bluetooth.cts.BluetoothLeScanTest#testScanFilter

fail

junit.framework.AssertionFailedError: Scan results shouldn't be empty

armeabi-v7a CtsHiddenApiBlacklistCurrentApiTestCases
TestResultDetails
android.signature.cts.api.HiddenApiTest#testSignature

fail

repackaged.junit.framework.AssertionFailedError:

armeabi-v7a CtsHiddenApiBlacklistDebugClassTestCases
TestResultDetails
android.signature.cts.api.DebugClassHiddenApiTest#testSignature

fail

repackaged.junit.framework.AssertionFailedError:

armeabi-v7a CtsHostsideNetworkTests
TestResultDetails
com.android.cts.net.HostsideVpnTests#testAppDisallowed

fail

java.lang.AssertionError: Failed to successfully run device tests for com.android.cts.net.hostside: Test run failed to complete. Expected 1 tests, received 0

com.android.cts.net.HostsideVpnTests#testDefault

fail

java.lang.AssertionError: Failed to successfully run device tests for com.android.cts.net.hostside: Test run failed to complete. Expected 1 tests, received 0

armeabi-v7a CtsSecurityTestCases
TestResultDetails
android.security.cts.EncryptionTest#testEncryption

fail

junit.framework.AssertionFailedError: Device encryption is required

 4某些测项需要特殊手法才能pass

fulltest or retry or 单测多次都不能过,可以考虑重启device,重新disconnect/connect device去测,终极的话就是重烧img镜像文件 or data reset,这样都不能过那就是软件bug,需要SW去解决的。(bug可能是芯片厂商 or google issue)

  • android.appsecurity.cts.AdoptableHostTest#testPrimaryStorage,因为CTS里有media测项,测试的时候需要先copy media到device data分区(emmc/flash),占用空间有2G左右。CtsAppSecurityHostTestCases testPrimaryStorage测试期间会在类似ddr与data分区之间搬运资料(看起来还是有往data分区搬,df -h可以查看data分区在变大),但是2G的资料也不是瞬间就搬过来的,就会类似卡住的迹象,要超过十分钟那样才能测完,并且是fail。所以一般情况下,retry这项之前可以先做data reset的动作,Setting->Device Preferences->Reset,这样就会把data分区下先前copy过去的media remove掉。或者直接将通过命令行将data下的media rm掉。

  •  有两条和UI设定Language有关系,Setting->Device Preferences->Language:English(United States),选United Kingdom就会出错。(US vs UK,美帝和大英之间的对决),红框有标出差别。ex:CtsWebkitTestCases android.webkit.cts.WebSettingsTest#testAccessAllowFileAccess 和CtsContentTestCases android.content.pm.cts.PermissionInfoTest#testPermissionInfo

  • 有的测项和网络相关:Wifi/ipv6,需要特定的网络环境配置才能过。ex:CtsLibcoreTestCases libcore.java.net.InetAddressTest#test_getByName_invalid[1]  这项需要将host端ap router DNS设置为8.8.8.8;libcore.java.net.SocketTest#testSocketTestAllAddresses 这项就需要ipv6的环境的特殊手法测试。CtsNetTestCases android.net.cts.DnsTest#testDnsWorks 也是需要ipv6测试环境。CtsNetTestCases android.net.cts.ConnectivityManagerTest#testAcceptRaRtInfoMaxPlen、android.net.cts.ConnectivityManagerTest#testAcceptRaRtInfoMinPlen、android.net.cts.ConnectivityManagerTest#testConnectivityChanged_manifestRequestOnlyPreN_shouldReceiveIntent 等是需要wifi条件下测试的。wifi测项设定:一个路由拉出两根有线(不能上网,只是为了adb连线),一根给到host端电脑,一根给到device设备,这里是指TV,这样host端和TV端可以通过adb连接;另一个路由提供可以连外网的wifi(能上google),TV连上此wifi。这样一来那些需要wifi connected的测项可以pass。(目前tv端 能上网的有线 + 无线是不能共存的,只有不能上网的有线 + 无线可以共存;也就是说假如tv连上无线,此时上网的有线接入,wifi就断掉了。优先使用有线)

  • CTSGSI测项需要先烧user版img,烧完之后最好直接刷system.img,不用在等user版img烧完之后,进开机向导一步一步设定进入Launcher,设定太多反而某些测项也不容易过。ex:CtsAppSecurityHostTestCases android.appsecurity.cts.ExternalStorageHostTest#testSecondaryUsersInaccessible

小结:Google test 有些具有一定的随机性,相同的软件+硬件,不同环境或时间点多测试几次有的pass,有的fail,不过我们最终是要出报告,需要的是pass。如果大概率的出错,那就要排查是软件 or 硬件 or环境 or 测试手法是否有问题。

<think> 我们正在解决一个具体问题:在特定目录下找不到vts_kernel_tests文件。 根据用户描述,他正在查找的目录是:/home/hs/tools/android-vts/tools/../../android-vts/testcases/vts_ltp_test_arm_64 这个路径可以简化为:/home/hs/tools/android-vts/android-vts/testcases/vts_ltp_test_arm_64 问题:在该目录下没有找到名为vts_kernel_tests的测试文件。 分析: 1. 首先,我们要确认vts_ltp_test_arm_64模块的测试文件通常包含什么。 根据之前的讨论,vts_ltp_test_arm_64模块是用于执行Linux Test Project (LTP)的64位测试套件。该模块的测试用例通常是二进制可执行文件,由LTP测试套件编译生成。 2. 用户提到的文件名为“vts_kernel_tests”,这可能是一个特定的测试集或测试脚本。但是,在标准的vts_ltp_test_arm_64模块中,我们通常不会看到这个名称的文件。 3. 考虑可能性: a) 该文件可能位于其他目录。 b) 该文件可能是用户自定义的测试脚本,并非VTS标准测试的一部分。 c) 用户可能混淆了测试模块名称。 4. 回顾引用内容: 引用[1]提到了vts_security_avb_test模块的目录结构,其中包含一些avbpubkey文件测试程序(vts_security_avb_test)。 引用[2]提到了VtsHalEvsV1_0TargetProfiling模块的路径测试脚本。 引用[4]提到了CTS/VTS测试环境搭建。 5. 我们可能需要查找其他模块。在VTS中,与内核相关的测试模块可能有多个,常见的包括: - vts_ltp_test_arm_64:LTP测试(用户空间测试,但覆盖内核接口) - vts_kernel_test:可能指的是内核本身的测试(如kselftest等) 6. 在VTS中,有一个模块名为“vts_kernel_test”,它包含内核的测试(例如kselftest)。用户可能应该查找这个模块对应的目录。 解决方案: 步骤1:确认正确的模块目录 如果用户要查找的是vts_kernel_test模块,那么测试文件应该位于: android-vts/testcases/vts_kernel_test/ 或者,根据架构不同,可能是: android-vts/testcases/vts_kernel_test_arm (32位) android-vts/testcases/vts_kernel_test_arm64 (64位) 步骤2:检查目录是否存在 让用户检查以下目录: /home/hs/tools/android-vts/android-vts/testcases/vts_kernel_test /home/hs/tools/android-vts/android-vts/testcases/vts_kernel_test_arm64 步骤3:如果用户确实需要vts_ltp_test_arm_64模块中的内核相关测试 在vts_ltp_test_arm_64模块中,测试文件通常是以测试用例命名的二进制文件(例如syscalls.open02_64bit),或者是整个测试集的打包文件(如ltp-runner)。没有名为“vts_kernel_tests”的文件。 步骤4:用户可能误记了文件名 在vts_ltp_test_arm_64目录中,常见的文件或目录结构可能是: data/ # 测试数据 arm64/ # 64位架构的测试二进制文件 ltp # 可能是可执行脚本或目录 或者,可能是用户想要运行整个LTP测试集,而运行整个测试集通常是通过一个脚本或一个入口程序(如ltp-runner)来执行的。 步骤5:建议用户使用VTS命令来列出测试用例 在vts-tradefed控制台中,可以列出模块的所有测试项: > run vts -m vts_ltp_test_arm_64 -l 这样可以看到所有可用的测试用例。 结论: 用户可能混淆了模块名称。如果用户需要的是内核测试(如kselftest),则应该查找vts_kernel_test模块。如果确实是LTP测试,那么vts_ltp_test_arm_64模块中不应该有名为“vts_kernel_tests”的文件。 操作建议: 1. 切换目录到vts_kernel_test(或vts_kernel_test_arm64)查看。 2. 如果用户确实需要在vts_ltp_test_arm_64模块中查找,那么请说明为什么需要这个文件(以便进一步帮助)。 如果用户坚持在vts_ltp_test_arm_64目录中找不到某个文件,可能是编译不完整,需要重新编译VTS测试套件。 编译方法(简要): 在Android源码根目录: $ . build/envsetup.sh $ lunch <device_target> $ make vts -j # 编译所有的VTS测试 编译后,测试文件将生成在out目录下,并复制到android-vts目录中。 因此,我们给出以下解决方案: </think> 以下是针对在 `/home/hs/tools/android-vts/testcases/vts_ltp_test_arm_64` 目录下找不到 `vts_kernel_tests` 文件的解决方案: ### 问题原因分析 1. **模块混淆** `vts_ltp_test_arm_64` 是专用于 **Linux Test Project (LTP)** 的测试模块,主要包含用户空间兼容性测试[^1]。 而 `vts_kernel_tests` 属于 **内核核心测试模块**,二者位于不同测试目录: ```bash # LTP 测试目录(用户空间) android-vts/testcases/vts_ltp_test_arm_64 # 内核测试目录(核心模块) android-vts/testcases/vts_kernel_test ``` 2. **编译验证** 检查编译输出目录是否存在内核测试文件: ```bash ls $ANDROID_BUILD_TOP/out/host/linux-x86/vts/android-vts/testcases/vts_kernel_test ``` 若目录为空,需重新编译: ```bash cd $ANDROID_BUILD_TOP make vts -j8 # 强制编译VTS套件 ``` ### 解决方案 #### 步骤1:定位正确目录 ```bash # 切换到内核测试目录 cd /home/hs/tools/android-vts/testcases/vts_kernel_test # 查看内核测试文件 ls -l vts_kernel_tests* ``` 应能看到类似文件: ``` vts_kernel_tests_arm64 # 64位测试二进制 vts_kernel_tests.config # 配置文件 ``` #### 步骤2:使用VTS命令执行 在 `vts-tradefed` 控制台中执行: ```bash > run vts -m vts_kernel_test -t <测试用例> ``` 例如运行全部测试: ```bash > run vts -m vts_kernel_test ``` #### 步骤3:检查编译配置 在 `Android.mk` 确认包含内核测试: ```makefile # android/test/vts/Android.mk include test/vts/testcases/kernel/vts_kernel_test.mk ``` ### 验证流程图 ```mermaid graph TD A[问题] --> B{目录是否正确?} B -->|vts_ltp_test_arm_64| C[错误目录:LTP用户空间测试] B -->|vts_kernel_test| D[正确目录] D --> E{文件存在?} E -->|是| F[执行测试] E -->|否| G[重新编译VTS] G --> H[make vts -j8] H --> F ``` ### 常见错误处理 1. **文件缺失** 若 `vts_kernel_test` 目录为空,需检查编译日志: ```bash grep 'vts_kernel_test' $ANDROID_BUILD_TOP/out/build.log ``` 2. **架构不匹配** 确保使用正确架构后缀: ```bash # ARM64设备使用 vts_kernel_tests_arm64 # ARM32设备使用 vts_kernel_tests_arm ``` 3. **环境变量配置** 添加测试文件到PATH: ```bash export PATH=$PATH:/home/hs/tools/android-vts/testcases/vts_kernel_test ``` [^1]: VTS模块按功能划分不同测试目录 [^2]: 内核测试模块需单独编译 [^3]: 测试执行需区分设备架构
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值