碰到CTS问题我该如何处理?

news2024/11/27 18:34:12

一、什么是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 logging

adb 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 -t

android.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 {

@Override

protected 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的原因。

原文查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网页JS自动化脚本(四)修改元素的尺寸颜色显隐状态

修改元素尺寸 在定位到了元素之后, 我们就可以对元素进行一些修改了,我们先来修改元素泊宽度以及高度 window.onloadfunction(){var theElementdocument.querySelector("img.undertips-link-lefticon");theElement.style.width"100px";theElement.style.…

BL200EC如何与欧姆龙相连

1、欧姆龙 NX1P2 的 Port1 接到电脑的网口,Port2 接到 BL200EC 的 ETH1 网口。 欧姆龙 NX1P2 和 BL200EC 通电。 2、打开 Sysmac Studio 软件,新建工程,选择 NX1P2-9024DT,点击创建。 ​ 编辑切换为居中 添加图片注释&#xf…

【云原生】服务网格kiali开发环境搭建问题解析

文章目录背景环境准备参考连接问题1:windows如何配置kiali开发环境问题2:kiali如何配置k8s连接问题3:kiali启动报错关键词:方便你们找到我背景 kiali(凯莉)是istio技术对应的管理系统,其前端为…

概率论与数理统计(1)——基本概念

引言 确定性(必然):一定发生与一定不发生 随机现象:可能发生也可能不发生 随机事件 实验:对事物进行观察测量 随机试验:(1)在相同的条件下可以重复;(2&…

oracle使用小结

1.安装时oracle12C去除勾选为创建为容器数据库 2.cmd命令 <1>.sqlplus/nolog // –运行sqlplus命令&#xff0c;进入sqlplus环境&#xff0c;nolog参数表示不登录&#xff1b; <2>.conn/as sysdba // **–以系统管理员(sysdba)**的身份连接数据库&#xff1b; …

[附源码]计算机毕业设计springboot健康医疗体检

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

记录--用JS轻松实现一个录音、录像、录屏的工具库

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 最近项目遇到一个要在网页上录音的需求&#xff0c;在一波搜索后&#xff0c;发现了 react-media-recorder 这个库。今天就跟大家一起研究一下这个库的源码吧&#xff0c;从 0 到 1 来实现一个 R…

EL 与 JSTL(1)( EL 表达式基础知识)

EL 表达式用美元符号“$”定界&#xff0c;内容包含在一对花括号“{}”中&#xff0c;例如&#xff1a;${expression}。 EL 表达式语法很简单&#xff0c;它最大的特点就是使用很方便。 1.EL 表达式特点 &#xff08;1&#xff09;在 EL 表达式中可以获得命名空间&#xff08;…

uni-app入门:全局数据共享方案之mobx

1.全局数据共享介绍 2.准备工作 3.使用说明 3.1 page页面进行全局数据共享 3.2 component组件进行全局数据共享 1.全局数据共享介绍全局数据共享也叫作状态管理,主要用于组件间数据共享问题的处理.实际开发中常用的实现方案:vuex、redux、mobx&…

西山科技将于12月6日上会:年收入2亿元,耗材收入成为新增长点

11月29日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;重庆西山科技股份有限公司&#xff08;下称“西山科技”&#xff09;将于2022年12月6日接受科创板上市委的现场审议。目前&#xff0c;西山科技已经更新了招股书&#xff08;上会稿&#xff09;。 据贝多财…

uni-app 使用 webview运行到小程序,打开萤石云视频

由于微信小程序特殊性&#xff0c;导致APP和h5适应的它都适应不了&#xff0c;因此&#xff0c;不得不对小程序做一些特殊的处理。 问题一&#xff1a;微信小程序无法打开web-view 的URL 相对于APP和H5而言&#xff0c;微信小程序比较严格&#xff0c;对于打开外链这种功能&a…

综述向:强化学习方法梳理(持续更新)

最近组内需要做强化学习相关研究&#xff0c;因为面对的是新项目&#xff0c;同事们对强化学习的原理都不太了解&#xff0c;我们就计划轮流在组内做一些不定期分享&#xff0c;补充相关的基础知识。于是我对强化学习的一些经典算法进行了梳理&#xff0c;并在此进行记录&#…

Observability:从零开始创建 Java 微服务并监控它 (一)

在本教程中&#xff0c;你将学习如何使用 Elastic 可观察性监控 Java 应用程序&#xff1a;日志、基础设施指标、APM 和正常运行时间。通过本教程&#xff0c;你将学到&#xff1a; 创建示例 Java 应用程序。使用 Filebeat 提取日志并在 Kibana 中查看你的日志。使用 Metricbe…

DPPE-PEG-Fucoidan 岩藻多糖-聚乙二醇-二棕榈酰基磷脂酰乙醇胺

DPPE-PEG-Fucoidan 岩藻多糖-聚乙二醇-二棕榈酰基磷脂酰乙醇胺 中文名称&#xff1a;岩藻多糖-二棕榈酰基磷脂酰乙醇胺 英文名称&#xff1a;Fucoidan-DPPE 别称&#xff1a;DPPE修饰岩藻多糖&#xff0c;DPPE-岩藻多糖 存储条件&#xff1a;-20C&#xff0c;避光&#xff…

Java - 缓冲输入输出流 (BufferedInputStream、BufferedOutputStream)

缓冲 Buffer 它是内存空间的一部分&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;这些存储空间用来缓冲输入或输出的数据&#xff0c;这部分空间就叫做缓冲区&#xff0c;缓冲区是具有一定大小的。 数据传输速度和数据处理的速度存在不平衡&#xff0c;例如每秒要写…

SwiftUI教程之如何在 Xcode 14 中创建曲线导航栏动画

让我们开始打开 ​​Xcode 14。我们将在 ContentView 中执行所有代码。首先,我要添加一些资产。 现在我们可以转到 ContentView 并开始编码了!💯 我们将要实现@Environment 协议、GeometryReader 和路径。 SwiftUI 中的@Environment 协议是什么? 使用Environment属性包…

用Python制造雪景图,体验 “ 人工下雪 ” 得快乐~

前言 大家早好、午好、晚好吖 ❤ ~ 今天起床&#xff0c;一看温度&#xff0c;赶忙穿上我的秋裤 一到外面&#xff0c;那风呼啦呼拉拉得吹&#xff0c;感觉我魂都跑了 别的地方已经下雪&#xff0c;而我才刚降温&#xff0c;而且还是骤降 都开始学习Python了&#xff0c;是时候…

计算机组成原理习题课第四章-2(唐朔飞)

计算机组成原理习题课第四章-2&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

WRKY转录因子通过促进GhMKK2介导的类黄酮生物合成调节棉花对尖孢镰刀菌的抗性

文章信息 题目&#xff1a;Group IIc WRKY transcription factors regulate cotton resistance to Fusarium oxysporum by promoting GhMKK2-mediated flavonoid biosynthesis 刊名&#xff1a;New Phytologist 作者&#xff1a;Lijun Wang&#xff0c;Chen Wang,Xingqi Guo…

利用FinalShell访问虚拟机

一、安装FinalShell 下载路径&#xff1a;https://pan.baidu.com/s/1uDIxLBnhrAQl_UqSHtD2Vw 提取码&#xff1a;fiaa 二、启动FinalShell 三、创建SSH连接 三、设置虚拟机主机名 1、查看虚拟机的主机名 命令&#xff1a;hostname 命令&#xff1a;cat /etc/hostname …