离职一段时间了,一直想写这篇博客,但是没有时间,最近有空,正好总结一下在上家公司一个开发做着一部分测试工作内容,当时也是没办法Google查得越来越严,公司岗位分工还将GMS认证划分为一个岗位,开发自己的项目只能自己跑GMS认证,因此我又多掌握一项技能嘿嘿 ,虽然没什么用:(。
GMS操作文档
1、GMS 本来只有三种测试 CTS、GTS、CTS-Verifier
2、但是在Android O版本之后,Google新加了两种测试VTS、GSI。
3、据说最近Google又增加了一项测试STS(Google还真是搞人啊哈哈),CVE安全测试,看了内部文档,据说10月1日,所有项目送测STS报告是必须的了。
4、以上除了CTS-Verifier是手动测试之外,其他的都是自动化执行工具脚本测试。
GMS测试工具
根据项目送测时间选择一个适合工具版本,这个一般SPM会给到测试。规定用什么版本工具
- CTS-Verifier
这个测试可以看mtk online视频,没有的可以根据手机上APK英文流程自己解读操作,对于新手来说最繁琐麻烦的就是这个,多做几个项目熟练熟练,这样测试的周期会大大缩短。
https://onlinesso.mediatek.com/_layouts/15/mol/topic/ext/TopicHome.aspx
账号:...
密码:虽然离职,但也不能透露哈哈
搜索CTS快速入门,有waiver(豁免)项,以及Verifier视频等等。
CTS、GTS、VTS、GSI这四个测试大同小异,只不过VTS、GSI测试,手机需要刷system。
- CTS
(各种测试包括(需要IPV6)网络、camera、蓝牙、wifi 、sensor等等等等) (这个单台手机测试一般比较久两三天,建议三台机器一起跑,其中高通(64位和32位)和MTK的还不一样,高通测试项是MTK的2倍)
手机端环境:
1、设置手机好环境,官方文档有,不再赘述。
2、写好IMEI号、MAC(连WIFI)地址号、Google key
3、(Ubuntu系统)电脑连接手机拷贝media和image文件,进入到改目录命令行模式。
执行红框两个脚本,“-s 设备序列号”表示拷贝到指定的手机设备上,很多命令都可以利用-s 来指定手机设备,例如:”adb -s 设备序列号 install a.apk”为指定设备来安装a这个apk应用,之后的运行cts命令也可以看到-s这个命令,来指定某台设备跑这个命令。(当然电脑上面只连接一台设备也就没必要用-s来指定设备)
./copy_images.sh -s 设备序列号(adb devices可查询)
./copy_media.sh all -s 设备序列号(adb devices可查询)
低存储设备,自己在手机新建文件夹,然后复制部分分辨率的,然后下次retry再复制之前没有的。
手机端准备完成就在Ubuntu电脑终端进入指定的cts工具的tools目录
进入到对应的tools目录的终端大致是这样的,然后运行脚本./cts-tradefed
在这个目录下运行完脚本就正式完成了跑cts所有准备工作,之后就是运行cts命令了
- 运行cts命令:
run cts --plan CTS 运行cts
run cts --plan CTS --shards 3 三台手机同时跑增加速度
run cts --plan CTS --shards 3 -s 设备序列号1 -s 设备序列号2 -s 设备序列号3
有时候一台电脑上有很多机器又要同时跑三台,就用上面这条命令,三台同时跑,并且利用 -s 指定三台需要跑的三台机器。
不知道设备序列号可以在已经运行cts脚本下的终端插拔USB线来查看自己想要的设备序列号
如下图就是指定 123456654321这个序列号的设备跑CTS
一般执行这种非Verifier的GMS认证,跑完一遍会有很多fail以及很多没有执行完的模块,这时候就需要在之前报告基础上retry,每次跑完CTS、GTS等等都会生成报告(中途不中断,可以通过拔掉手机中断生成报告,中断脚本是不能生成报告的,即使你只有一项了)。
这时候cts目录就变成这样的results和logs就是对应的结果以及log。
这时候报告名称就是对应的测试执行开始的时间。(一个压缩包和文件夹)
如下图通过 l r (list results的缩写)命令可以查看报告的信息,有对应的报告信息.
★ l r信息解读:
图中有(0-6)7个报告,每一行就是一个报告信息,不断增大sessionid就是在每个之前报告基础上retry的
红框表示pass项、fail项以及执行模块数和总共模块数
弄清楚了这些报告信息,这时候就需要retry命令,(retry之前最好恢复出厂设置,重新设置手机端环境)
run cts --retry session_id(如上图通过l r查询对应要retry的报告session id) -s 设备序列号
多retry几次之后发现fail项并没有减少,说明这就是软件问题,有可能有时候手机的外界环境也会影响(如室内亮度、IPV6网络、GPS信号等等)一些test项fail。
之前mtk online cts快速入门上也提过waiver项,意思是跑完之后有些fail项是不用管了,google提供豁免id,交给SPM把waiverid代理就OK了
- GTS
(主要和网络有关,一般网好一个下午就OK,不好,一项要执行很久,还不pass,这是最悲催的)
GTS与CTS基本一样把执行脚本的命令改成./gts-tradefed
GTS不需要IMEI和拷贝media和image这一步,主要和网络有关
以及运行的命令run cts改成run gts就行了
有时候会遇到特殊情况
如上图,就需要在命令后面加上红框内容,来忽略一些条件
- GSI (与CTS差不多,运行比较久,所以也建议3台机器跑)
I.VTS和GSI与CTS和GTS除了使用的工具不同之外,就是需要刷system.img
上图对应32位机器和64位机器的包。
解压完成之后里面大概就是对应日期的system.img。这里只会用到一个,
具体刷哪一个就需要通过about_phone 查看对应google patch日期。
注意:在刷system之前需要把IMEI、MAC、Google key都写上,刷完之后就不能写了。
II.打开对应目录的终端,打开手机开发者模式下的Unlock OEM,然后连接手机执行下面命令,这个可能要问人操作
adb reboot bootloader (adb命令重启进入bootloader,刷system要进入)
fastboot flashing unlock
fastboot oem unlock (执行完这一条命令,手机屏幕会有选项,按Volum +)
fastboot flash system system-aosp_arm_a-2018-04-05.img(这个就是该目录对应的文件,看googlepatch刷几月几号的)
fastboot reboot (fastboot模式下手机重启)
重启完之后就是一个已经刷完system手机,和原生一样,会发现少了很多第三方的app,按照CTS配置运行命令。
GSI和VTS都是统一脚本下,所以是 ./vts-tradefed
命令把 cts改成cts-on-gsi就行了
有时候运行没成功会报preconditions错误,意思是一些先决条件检查不正确
这时候如GTS 的ingore错误在命令后面加上--skip-preconditions就能运行起来了。
(同时跑几台机器、retry等等和cts一样不在赘述)
- VTS(一般3个小时就Ok了,比较快)
./vts-tradefed执行脚本,命令cts改成vts
以上像--shards、--retry、-s等命令都是共用的,不分工具,分工具的就是有cts、vts、gts、cts-on-gsi,这四个字符串了。
拓展
1、有时候SW更新软件需要验证某一个单项是否OK,以cts为例,通过result看报告
run cts -m CtsLegacyTest26ApiSignatureTestCases -t android.signature.cts.api.SignatureTest#testSignature
上面命令就是运行cts单项 : run cts -m 模块 -t test项
2、run cts --help 查看某个命令意义,这里只截取一部分,
3、下面这个命令就是要retry(retry的意思是只想这个报告里面的fail项)某个报告,然后跳过某个模块的命令
run cts --retry session_id(需要retry的某个报告) --exclude-filter 模块
4、有时候需要在别的电脑上retry已经有的报告
这时候就需要把报告拷贝的results目录下,然后再运行脚本之后的终端上
l r 查看你拷贝到results目录下(刚解压的工具一般没有,自己新建results目录拷贝进去)的报告,执行retry命令
5、当跑起来时候,最好是看到有pass,然后在运行脚本的终端下用 l d(list devices缩写)查看该脚本中运行的设备,最后应该就可以溜了:D。
其他
1、据说工具包cts 8.1-r6(包括8.1-r6)之后的运行cts 命令变了,没试过
run cts-suite --shard-count 3
Cts变成cts-suite , --shards 变成--shard-count
2、工具GTS 6.0-r1(包括)的retry命令也变了
run retry --retry session_id(l r可以查询已经完成跑完结果的报告)
原retry命令:run gts --retry session_id
总结
四个脚本工具测试中,
1、所有手机端设置大致都是一样的
2、CTS、GSi要拷贝media、image文件到手机中
3、GSI和VTS是用同一个工具,并且都要刷对应google patch日期的system
4、CTS和GSi时间比较久,三台一起跑的话大概一天完成、GTS、VTS比较短。