一、什么是CTS?

CTS测试全称为系统兼容测试(Compatibility Test suite),CTS是为了测试手机是否符合google定义的兼容性规范(Compatibility Definition)。从而基于Android的应用程序能在基于同一个api版本的设备上面运行。通过CTS测试的设备可以获得Android的商标,并且享受Android Market的权限。

1.1CTS测试目的

由于Google系统的开源性,很多手机厂商基于安卓系统做出了深度优化,从而造成了安卓移动终端的碎片化,导致android终端的兼容性差的问题,严重影响用户体验。手机通过CTS测试,使市场得到了一个通用的规范:

1.1.1 让App提供更好的用户体验,用户可以选择更多的适合自己设备的app

1.1.2 让开发者设计更高质量的app

1.1.3 通过CTS的设备可以运行Android market

1.1.4 CTS 是一套单元测试,其目的是尽早发现不兼容性,并确保软件在整个开发过程中保持兼容性。

1.2CTS测试运行原理

在pc端安装CTS测试套件,安装完成后,就可以通过连接到pc端的数据线将测试用例发送至手机上,完成测试用例的执行,并且把执行结果返回给PC端。

二、本地怎么进入CTS状态

2.1手机端设置

打开开发者模式打开不锁定屏幕的开关 (Don't lock screen → on)打开直接进入系统的开关 (Skip screen lock → on)打开USB调试;USB安装;USB调试(安全设置)) (USB debugging → on ; Install via USB → on ; USB debugging (security settings) → on )选择日志级别为Verbose (Select log level → Verbose)

2.2PC端设置

直接下载Google 原生 CTS工具

下载地址 CTS Release

在android-cts/tools 执行 ./cts-tradefed

进入CTS模式

三、本地跑CTS进行测试

3.1进入CTS模式

运行CTS命令

  • 整模块测试:

run cts -m [模块] -t [测试模块的类]
  • 测试某一个用例:

run cts -m [模块] -t [测试模块的类]#[测试的某一个用例]
  • 示例

run cts -m CtsWindowManagerDeviceTestCases -t android.server.wm.PinnedStackTests#testConfigurationChangeOrderDuringTransition

四、测试结果

4.1CTS log和CTS结果

4.1.1log路径

android-cts/logs/cts命令执行时间点/

4.1.2结果路径

android-cts/results/cts命令执行时间点/

4.2结果查看

4.2.1最直接的结果查看在终端输出,直接从终端查看结果

4.2.2文件夹查看log

4.1 中 logs/cts命令执行时间点/ 路径下查看如下两个文件

device_logcat_testxxxxx.txt 为测试的CTS的adb log输出

host_log_xxxxxx.txt 为测试的CTS的结果输出和终端输出几乎无差别

查看测试结果

浏览器打开4.1 中 results/cts命令执行时间点/test_result.html

4.3 感觉log 信息打印不全面/添加log信息

4.3.1开放protolog

如果感觉log显示不全,可以添加log 编译进手机里面进行测试。

也可以使用logging打开protolog开关进行测试(framework)

adb shell dumpsys window loggingadb shell wm logging

4.3.2修改CTS PAK添加log

当测试CTS报错之后,无法暂时无法确定问题原因,可以添加 log进行打印堆栈方便定位问题

CTS测试CASE全部在 源码的 cts目录下,修改的时候需要导入CTS目录

  • 编译CTS 测试 APK

  1. 查找离修改文件最近的Android.bp

  2. 查找 android_test 便签里面的name信息

  3. ninja/make 编译 name

  4. 将编译好的 CtsWindowManagerDeviceTestCases.apk 放置 qcts/google/cts/cts-12.0_R4/android-cts/testcases 文件夹下,并进行替换。

  5. 然后用qts测试CTS,查看log输入

示例:

如下图的修改添加堆栈信息

  • 执行 ninja/make CtsWindowManagerDeviceTestCases -j16

  • 将编译好的 CtsWindowManagerDeviceTestCases.apk 放置 qcts/google/cts/cts-12.0_R4/android-cts/testcases 文件夹下,并进行替换。
  • 然后用qts测试CTS,查看log输入。

五、实战案例解析

运行

run cts -m CtsWindowManagerDeviceTestCases -tandroid.server.wm.KeyguardLockedTests#testDismissKeyguardActivity_method_cancelled

报错如下:

java.lang.AssertionError: FAILED because unsatisfied: onDismissCancelled of ComponentInfo{android.server.wm.app/android.server.wm.app.DismissKeyguardMethodActivity}

1.报错为testDismissKeyguardActivity_method_cancelled 报错首先找到 testDismissKeyguardActivity_method_cancelled 所在的测试用例查看所测试的项目。

cts/tests/framework/base/windowmanager/src/android/server/wm/KeyguardLockedTests.java#196

2.发现测试用例使用的是 DISMISS_KEYGUARD_METHOD_ACTIVITY 而 DISMISS_KEYGUARD_METHOD_ACTIVITY 是指向的 DismissKeyguardMethodActivity

cts/tests/framework/base/windowmanager/app/src/android/server/wm/app/Components.java#40

3直接找到DismissKeyguardMethodActivity ,查看其内部的实现

cts/tests/framework/base/windowmanager/app/src/android/server/wm/app/DismissKeyguardMethodActivity.java

还有部分权限

cts/tests/framework/base/windowmanager/app/AndroidManifest.xml#299
​
public class DismissKeyguardMethodActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getSystemService(KeyguardManager.class).requestDismissKeyguard(this,new KeyguardDismissLoggerCallback(this, DISMISS_KEYGUARD_METHOD_ACTIVITY));}}

将关键代码摘出来 然后单独写成APK,运行在PASS和非PASS的手机上,对比界面和log信息哪里异常。

六、CTS处理方法

6.1 正面分析方法(耗时较长)

代码正面分析有利于理解测试用例的逻辑,可以增加对业务逻辑的理解,增长自己的知识储备。

需要对比Pixel的log定位置问题。

竞品机器反编译代码对比。

6.2 二分法(适合项目紧急,新报的问题)

查看Bug上报的时间,然后选取上报时间前一个星期的版本进行测试,如果PASS 则进行二分法定位到某天提交的代码导致。

如果一个星期前FAIL,则刷取一个月前的版本测试,如果测试PASS,则用二分法继续定位到某天提交的代码导致。

定位到某天之后可以查看自己刷取包的起包时间,将时间范围缩小到最小。

如果未定位到需要正面分析。

无论是那种方法定位到的问题,都要深入分析rootcase的原因。

原文查看

碰到CTS问题我该如何处理?相关推荐

  1. 你想要的生信知识全在这——生信宝典目录 (181202)

    生信的作用越来越大,想学的人越来越多,不管是为了以后发展,还是为了解决眼下的问题.但生信学习不是一朝一夕就可以完成的事情,也许你可以很短时间学会一个交互式软件的操作,却不能看完程序教学视频后就直接写程 ...

  2. 生信宝典文章集锦,你想看的都在

    本文转载自"生信宝典",己获授权. 生信的作用越来越大,想学的人越来越多,不管是为了以后发展,还是为了解决眼下的问题.但生信学习不是一朝一夕就可以完成的事情,也许你可以很短时间学会 ...

  3. html设置文字超过字数_html文本控制显示字数超出用省略号的方法

    html文本控制显示字数超出的方法怎么解决?也就是文字溢出控制显示字数,table文字溢出控制td显示字数 看到标题你一定很轻易就会想到截断文字加省略号"..."的做法.哈哈,就是 ...

  4. 学习生信的系列教程 | 留言您是如何学习生信的免费获取北大出版《Python数据分析》书籍...

    生信的作用越来越大,想学的人越来越多,不管是为了以后发展,还是为了解决眼下的问题.但生信学习不是一朝一夕就可以完成的事情,也许你可以很短时间学会一个交互式软件的操作,却不能看完程序教学视频后就直接写程 ...

  5. 知乎阅读三百万的生信学习指南

    作为本科学生物,硕博转行生物信息的人,经常会被人问起,为啥学习生物信息了呢?这背后通常会带着一些困惑,生物信息分析好不好学? 生信的作用越来越大,想学的人越来越多,不管是为了以后发展,还是为了解决眼下 ...

  6. win10连无线但是无网络连接到服务器,简单几步解决win10连接wifi显示无internet访问的问题...

    近日有使用win10纯净版系统的用户跟小编反映说,自己要连接wifi的时候显示无internet访问的问题,那我们碰到这样的问题该如何处理呢?下面小编就来教大家关于解决win10连接wifi显示无in ...

  7. 第五日 高手篇:信用证全攻略

    一.外贸货款结算方式对于出口商而言,安全.及时.全额收回货款是头等大事.前面说过,外贸是单证交易.出口商把代表货物的全套单证交给客户,就意味着把货物交给客户了.那么,如何从客户手中取回货款呢?预付款固 ...

  8. win10无法连接到win7系统更新服务器,win10系统提示无法连接到windows服务的解决方法...

    有不少win10系统用户到本站反馈说碰到这样一个问题,就是电脑在开机的时候,弹出提示无法连接到Windows服务的情况,碰到这样的问题该如何处理呢,经过分析是由于windows系统中的服务未开启所引起 ...

  9. 计算机登陆后如何防止自动注销,登录win10系统后自动注销的解决方法

    有许多win10系统用户到本站反馈说碰到这样一个问题,就是在登录系统之后,过一会电脑就会自动进入注销状态,然后无法使用,碰到这样的问题要如何处理呢,本教程就给大家分享一下登录win10系统后自动注销的 ...

最新文章

  1. ios手机怎么连接adb命令_手机蓝牙怎么连接汽车蓝牙放音乐,车载蓝牙播放器怎么用...
  2. Apache Struts2(S2-045)漏洞反思总结
  3. c语言中的tanh函数,tanh()函数,用于C ++中的复数
  4. CTFshow 爆破 web27
  5. C语言求二个数的最大公约数gcd和最小公倍数lcm(附完整源码)
  6. java教程传智播客,面试真题解析
  7. Linux引导流程(第二版)
  8. ibatis 存储过程 结果集 map_大数据之MapReduce shuffle过程
  9. django-xadmin定制之分页显示数量
  10. 日志收集神器 Logstash,闪亮登场~
  11. Resource Hacker(可以修改.exe文件)
  12. Unity激光雷达仿真调研(svl)
  13. Oracle 锁表查询和解锁方法
  14. 紧急大项目的应付手法
  15. 关于信号强度单位db和dBm
  16. File-backed Storage
  17. 功能测试是什么?性能测试是什么?两者有什么区别?
  18. linux系统运维面试2000多题
  19. 三角函数,反函数去反的数值
  20. 微服务监控告警:Prometheus

热门文章

  1. 计算机保研经历6,双非学长6所名校的保研经验
  2. js 图片懒加载最好的方法
  3. 【前端学习】unicode码点问题 es6,为什么\u{20BB7}和\uD842\uDFB7相同
  4. python中ret是什么意思_python 代码中 ret=True 代表什么意思?
  5. nacos1.4.1启动报错acos is starting with cluster
  6. 13.类的关系——继承关系
  7. Linux下 mdadm 模拟RAID 0, RAID1
  8. 房地产小程序开发-地产小程序开发
  9. 【算法题】1834. 单线程 CPU
  10. HTML Canvas 参考手册