开始第一个简单的Android UI自动化测试
1.使用adb命令连接真机或模拟器
2.打开uiautomatorviewer工具
3.使用uiautomatorviewer工具获取应用的元素进行定位
4.简单介绍unittest框架的使用方法
5.使用Python编写猫宁考勤应用注册模块的自动化测试
1.使用adb命令连接真机或模拟器:
手机USB连接电脑,进入开发者模式;
cmd命令:adb devices ,查看手机是否连接
这里写图片描述
显示错误
这是因为adb的端口被占用,我们需要查看是什么应用占用了这个端口(5037为adb默认端口)
cmd命令 : netstat -aon|findstr “5037”
这里写图片描述
可以看到占用5037端口对应的程序的PID号为8388;
cmd命令 : tasklist|findstr “8388”
这里写图片描述
可以看出8388对应的程序为kadb.exe,说明该程序正在使用5037端口;
这时我们需要在任务管理器中结束kadb.exe进程,按快捷键“Ctrl+Shift+Esc”调出Windows任务管理器,找到“kadb.exe”,单击下方的结束进程即可!
这里写图片描述
我们再次运行cmd命令:adb devices
这里写图片描述
这一步成功后我们才能运行sdk自带的uiautomatorviewer;
我们需要用uiautomatorviewer工具来获取元素,用于定位。
cmd命令:uiautomatorviewer,打开uiautomatorviewer界面
这里写图片描述
或者找到sdk目录:sdk\tools中找到uiautomatorviewer.bat文件双击运行
这里写图片描述
2.打开uiautomatorviewer工具
这里写图片描述
我们可以根据text,resource-id,class等元素进行定位
3.使用uiautomatorviewer工具获取应用的元素进行定位
这里我使用python自带的IDLE进行编写测试脚本,打开python文件找到IDLE(python GUI)双击打开,如图:
这里写图片描述
4.简单介绍unittest框架的使用方法
# -*- coding:utf-8 -*-
from uiautomator import device as d
import unittest
class Mytest(unittest.TestCase):
#初始化工作
def setUp(self):
print "--------------初始化工作"
#退出清理工作
def tearDown(self):
print "--------------退出清理工作"
#测试点击猫宁考勤case
def test_login(self):
d(text="猫宁考勤").click()
print "--------------测试1"
#测试2
def test_z(self):
print "--------------测试2" #这里你可以写你的第二个测试用例,
#测试3
def test_w(self):
print "--------------测试3" #这里你可以写你的第三个测试用例。。。。。。。。。。。。。
if __name__ == '__main__':
unittest.main()
结果如下:
Testing started at 21:14 …
————–初始化工作
————–测试1
————–退出清理工作
————–初始化工作
————–测试3
————–退出清理工作
————–初始化工作
————–测试2
————–退出清理工作
Process finished with exit code 0
从结果中我们可以看出unittest框架的运行方式为:
setUp 测试1 tearDown
setUp 测试2 tearDown
setUp 测试3 tearDown
5.使用Python编写猫宁考勤应用注册模块的自动化测试
# -*- coding:utf-8 -*-
from uiautomator import device as d
import time
import unittest
class MyTestSuite(unittest.TestCase):
# 初始化工作
def setUp(self):
print "--------------初始化工作"
# 退出清理工作
def tearDown(self):
print "--------------退出清理工作"
#***************************方法**************************************
# 判断控件是否存在 & text
def check_controls_exists(self, controls_text):
if d(text=controls_text).exists:
return 1
else:
return 0
# 判断按钮是否置灰 & text & clickable
def check_controls_click_text(self, controls_text):
if d(text=controls_text).info.get("clickable") is True:
return 1
else:
return 0
#assertIn(a, b) a in b
def check_ainb(self,resourceid,b):
if d(resourceId=resourceid).info.get("text") in b:
return 1
else:
return 0
#***********************************************************
# 注册模块
def test_Aregister(self):
try:
time.sleep(2)
#猫宁考勤开启全新时代
self.assertEqual(self.check_controls_click_text("注册"),1,u"猫宁考勤开启全新时代")
# 猫宁考勤开启全新时代--》点击注册按钮进入注册猫宁界面
d(text="注册").click()
time.sleep(3)
#注册猫宁界面
self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_phone","请输入手机号码"),
1,u"注册页面-》请输入手机号码")
self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_verifycode","请输入验证码"),
1,u"注册页面-》请输入验证码")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0,u"注册页面-》获取验证码")
self.assertEqual(self.check_controls_click_text("《中科爱讯服务协议》"), 1,u"注册页面-》《中科爱讯服务协议》")
self.assertEqual(self.check_controls_click_text("注册"), 0,u"注册页面-》注册")
time.sleep(2)
#《中科爱讯服务协议》
d(text="《中科爱讯服务协议》").click()
time.sleep(2)
self.assertEqual(self.check_ainb("com.isentech.attendancet:id/title","服务协议"), 1,u"注册页面-》服务协议")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/title_back").click()
time.sleep(1)
#手机号不输入是否能注册
d(text="注册").click()
time.sleep(3)
# 手机号只输入1个数字是否能注册&只输入1个数字是否能获取验证码
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("1")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0)
time.sleep(1)
d(text="注册").click()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
time.sleep(1)
#只输入5个数字是否能获取验证码
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("11111")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0)
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
time.sleep(1)
#只输入手机号是否能注册
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text(phone_number)
self.assertEqual(self.check_controls_click_text("注册"), 0)
time.sleep(1)
d(text="注册").click()
time.sleep(1)
#输入正确的验证码&获取验证码是否高亮
d(resourceId="com.isentech.attendancet:id/regis_verifycode").set_text("5648")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("获取验证码"), 1)
time.sleep(2)
#密码只输入1个数字是否能注册&注册按钮是否高亮
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("1")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("1")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("注册"), 0,u"密码只输入1个数字是否能注册")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
time.sleep(1)
#输入不相同的密码是否能注册
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("12345")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("注册"), 0,u"输入不相同的密码是否能注册")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
time.sleep(1)
#输入正确的密码是否能注册&我已同意是否打钩
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("123456")
time.sleep(1)
self.assertEqual(self.check_controls_click_resourceId("com.isentech.attendancet:id/regis_agree"), 1)
self.assertEqual(self.check_controls_click_text("注册"), 1)
time.sleep(2)
d(text="注册").click()
time.sleep(8)
except Exception, e:
print u"Error: 注册模块有问题\n", e
def test_app():
test_unit = unittest.TestSuite()
test_unit.addTest(MyTestSuite("test_Aregister"))
if __name__ == "__main__":
# 测试app
unittest.main()
B. android音乐播放器的测试怎么写
软件工程数据库课程设计——测试报告 1 引言 1.1 编写目的 编写该测试报告主要由以下几个目的 1.通过对测试结果的分析,得到对软件质量的评价 2.分析测试的过程,产品,资源,信息,为以后制定测试计划提供参考 3.评估测试执行和测试计划是否符合 4.分析系统存在的缺陷,为修复和预防 bug 提供建议 1.2 背景说明 说明: 1. 被测试软件系统的名称:android 音乐播放器 2. 该软件的任务提出者:android 老师。 1.3 定义 严重 bug:出现以下缺陷,测试定义为严重 bug 系统无响应,处于死机状态,需要其他人工修复系统才可复原。 点击某个按钮后出现“ Unexpect error,the application has been stopped”或 者返回异常错误。 进行某个操作后,出现“ Unexpect error,the application has been stopped” 或者返回异常错误。 当切换音乐时,出现” Unexpect error,the application has been stopped”或 者返回异常错误。 1.4 参考资料 列出要用到的参考资料,如: 1. 2. 《android 需求和实际和说明书》 《android 项目数据字典》 第1页 软件工程数据库课程设计——测试报告 3. 《android 后台管理系统测试计划》 4. 《android 项目计划》 5. 《android 程序设计基础》 2 测试概要 Android 音乐播放器系统测试从 2014 年 5 月 25 日开始到 2014 年 6 月 1 日结束, 共持续 6 天,测试功能点 6 个,执行 10 个测试用例,平均每个功能点执行测试用例 2 个,测试共发现 5 个 bug,其中严重级别的 1 个,无效 1 个,平均每个测试功能点 1 个 bug。 3 测试结果及发现 3.1 测试 1(功能键测试) 在本次测试中对各个功能键进行了相关的测试,并把各个功能键该有的功能给体现出来。 最后的测试结果是,各个功能键基本符合预想的要求,但是在测试中间,不时会出现一些系 统错误。 3.2 测试 2(音乐清单测试) 在对音乐清单模块进行测试时,先了解音乐清单的具体功能的体现与要求。音乐清单模 块具备自动扫描功能,自动更新,删除重复,删除错误功能。测试过程比较繁琐,不停更换 音乐,增加重复音乐,增加错误来对该项进行测试。对音乐清单界面转变,字体等还需改进。 4 对软件功能的结论 4.1 功能 1(功能键) 名称:播放 参与者:用户 目标:用户点击播放音乐列表中的歌曲 前置条件:播放器正在运行 基本事件:1.用户单击列表中歌曲 2.播放器将播放列表中的点击 的歌曲 名称:暂停 参与者:用户 目标:使得用户可以暂停正在播放的歌曲 第2页 软件工程数据库课程设计——测试报告 前置条件:歌曲正在播放且未停止和暂停 基本事件:1.用户单击“暂停”按钮 2.播放器将暂停当前的歌曲 名称:上一首/下一首 参与者:用户 目标:使得用户可以点播上一首或下一首音乐 前置条件:歌曲正在播放或歌曲暂停中 基本事件:1.用户单击“上一首或下一首”按钮 2.播放器将播放上一首歌曲或下一首歌曲 4.1.1 能力 本部分是对播放音乐时的一些简单的操作,如播放,暂停,切歌。为满足这部分功能, 进行不断的测试已将可以预料到的错误,进行了修改,大体上不会再出现此类错误。 4.2 功能 2(音乐清单) 名称:音乐列表 参与者:用户 目标:使得用户可以进入音乐列表 前置条件:程序在运行 基本事件:1.用户单击“音乐”分区 2.播放器进入音乐列表 4.2.1 能力 本部分是对音乐列表的功能的测试,此项目的音乐列表的基本功能可以实现。对于一些 界面方面的操作,在测试中始终出现错误,排除不了。相对来说测试是成功的,界面上的操 作与音乐播放器的主要功能没有影响,所以可以删除此部分。 5 分析摘要 5.1 能力 Android 音乐播放器的测试今本上是成功的。对于一些基本功能,都能够实现。本软件的 可移植性还是比较强的,只要是 android 手机都可以安装本软件,并且不会出现系统不兼容 第3页 软件工程数据库课程设计——测试报告 的问题。最终的测试结果,也暴露了一些问题,与要求的差一些。就是在音乐清单部分,对 于字体的修改以及界面的转换方面没有完全实现。本软件本就是 android 软件,在测试环境 与运行环境上不存在差异,这完全是因为 android 太强大了。 5.2 缺陷和限制 1. 缺陷描述:音乐清单有乱码,音乐无名称,查看不方便 缺陷影响:其他音乐都有名称,音乐无名称,查看不方便 推迟原因:目前的日志 为了调试方便,显示了很多其它信息,在项目正式发布时会统一处理的。 2. 缺陷描述:数据字典种类修改,默认值设置后,在调用该数据字典种类的数据字典, 默 认值无显示 缺陷影响:数据字典种类的默认值设置后,不能显示设置的默认值,相当于数据字 典种类默认值设置功能未实现 推迟原因:该功能暂时不好实现,需要和和系统的默认语种一起处理。 3. 缺陷描述:多媒体添加,文件上传功能未实现 缺陷影响:文件上传功能未实现 推迟原因:该功能暂时不好完成,在下个版本中完成 5.3 建议 在项目开始的时候应该制定编码标准,数据库标准,需求变更标准,开发和测 试人员都 严格按照标准进行,可以在后期减少因为开发,测试不一致而导致的问题,同时也可以降低 沟通成本。 发布版本的时候,正确布置测试环境,减少因为测试环境,测试数据库数据的 问题而出 现的无效 bug。 开发人员解决 bug 的时候,填写 bug 原因以及解决方式,方便 bug 的跟踪。 开发人员在开发版本上发现 bug,可以通知测试人员,因为开发人员发现的 bug 很有可 能在测试版本上出现,而测试人员和开发人员的思路不同,有可能测试人员没有发现该 bug, 而且,这样可以保证发现的 bug 都能够被跟踪。 。 5.4 评价 本软件经测试,可以在任何 android 设备上运行,安全性得到了保证,可以交付使用。 第4页
C. 如何使用python做android的自动化测试
一、首先说说手机自动化测试的原理 1、手机自动化测试的原理为PC上一个控制端(测试工具)与手机上的一个agent端,通过串口、USB或者无线方式将PC与手机终端相连,然后应用测试工具向手机发送请求或者命令,手机收到命令或者请求后,交给agent端解析,然后agent将这些解析的命令下发给手机的各个功能模块所能识别的命令,调用那些功能模块模拟操作。完成这些操作后,手机会返回一些信息,agent可以抓取这些信息,然后传回给PC端,这样就完成了一个完整的手机自动化测试。 2、关键点在于agent,有的公司是向自己的手机终端的软件功能模块中植入测试程序响应代码,有的公司可以利用MMI_Command的方式来控制手机终端;原理就是给手机提供一个响应的接口。 3、而对于PC控制端,这个测试脚本用各种编程语言都可以,看如何定义 4、而又的自动化测试设计成录制的机制,说通俗点,就是记录手工操作的键盘信息或者LCD的操作信息(LCD需要用到智能识别机制) 5、自动化测试框架的搭建方法是通用的,你需要有一套自己的测试框架才能保证自动化测试的顺利开展。 二、Android自动化测试方向: 1、CTS,CTS 测试基于Android instrumentation 测试, 其又基于JUnit 测试。说白了, CTS 就是一堆单元测试用例。这也是Java 语言的擅长部分。 2、 Monkey工具,Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。 3、ASE,ASE 意思为Android 脚本环境, 即我们可以通过脚本(比如Python)调用Android 的功能,从而定制一些测试。比如打电话,发短信,浏览网页,等。我们可以扩充它的API(Java 部分), 并用python 脚本调用这些API, 从而实现丰富的测试功能。用于API 部分可以访问到Android 全部API, python 又能灵活部署测试,所以ASE 的扩展性非常好。 4、Robotium,该工具用于黑盒的自动化测试。可以在有源码或者只有APK 的情况下对目标应用 进行测试。Robotimu 提供了模仿用户操作行为的API,比如在某个控件上点击,输入Text 等等。(推举你可以研究一下这个工具,开源的,我有资料) 5、可以自己开发一个手机方面的自动化测试工具,原理上一样的 如果你想要什么资料的话或者想一起学习研究的话,可以给我发邮件:[email protected]
D. 怎么写Android手机游戏测试用例
第一项:游戏安装
游戏安装后是否与安卓软件版本(手机环境)兼容
游戏安装后是否会影响到其他软件的使用
游戏安装后是否有优化功能
游戏安装包是否过大
游戏安装包是否安全,无病毒、木马等恶意破坏性程序
游戏安装后显示的游戏图标(App Icon)是否显示正常
......
第二项:游戏画面与文字
游戏界面是否能依照手机的屏幕摆放位置来进行有效的横/竖屏切换
游戏画面是否在游戏开启后运行流畅
游戏画面是否符合游戏风格
游戏画面是否符合大众的审美观,并无敏感性因素
游戏画面是否符合屏幕分辨率的标准,无显示不完整等异常现象
游戏文字是否显示清晰
游戏文字是否美观,并与游戏画面相匹配
游戏文字是否符合大众人的审美观,并没有敏感性词汇
游戏文字是否汉化完整
游戏文字是否能根据语言的设置进行多国语言文字的切换
游戏文字是否出现错别字、繁体字(某些状况可以考虑使用繁体字)、火星文等文字
......
第三项:游戏声音
游戏背景音乐是否能在游戏运行时播放
游戏背景音乐是否出现播放延迟、播放提前等播放不同步现象
游戏背景音乐是否与游戏风格相符合
游戏音效是否能在游戏运行时播放,并无不同步现象
游戏背景音乐和音效是否符合大众的审美观,并没有敏感性因素
当进入通话状态时,是否出现声音混合现象
游戏声音是否出现变形
......
第四项:游戏核心功能(可玩性)
游戏玩家基本动画(站立、行走、奔跑、基本攻击、技能攻击等)播放是否正常
游戏在运行时是否出现死机、黑屏、崩溃等严重影响游戏体验的现象
任务系统是否完善、是否出现描述错误、当前任务与进行中的任务不匹配等现象,达到任务要求后能否提交任务,提交任务后任务能否完成,任务完成的奖励是否正确
游戏剧情(世界观)是否符合大众的审美观,并没有敏感性因素
游戏玩家能否正常的攻击怪物、拾取物品、受到伤害,玩家生命值为0时能否正常死亡
游戏敌人(怪物或对手)能否正常的攻击玩家、受到伤害,敌人(怪物或对手)生命值为0时能否正常死亡
玩家与敌人(怪物或对手)的生命值、法力值等是否显示正常(包括数值和血条),受到攻击后,生命值是否下降,释放技能后,法力值是否下降(包括数值和血条)
杀死敌人(怪物或对手)后,物品的掉落和经验值的奖励是否正常
玩家的攻击力、防御力等数值计算是否正确,当玩家强化装备后,攻击力、防御力等数值能否上升
玩家的背包系统是否完善,能否实现拾取物品后物品出现在背包内,当背包超出负重上限或物品栏满栏的时候是否还能捡取物品,能否在背包内实现物品出售、物品修理等功能,背包内的物品信息是否显示正确,使用后能否出现效果。
游戏是否具备自动寻路等导航功能,若有,该功能是否完善,玩家、宠物、坐骑和怪物的跟踪是否正常
当玩家的装备的持久度不足时,攻击力、防御力能否受到影响
进入游戏后,游戏场景的渲染、纹理是否显示正常
NPC的功能是否能实现
游戏每个功能按键是否可以点击,点击后是否出现点击后的效果
游戏虚拟杆是否可以正常的控制玩家的移动,游戏的虚拟按钮是否可以正常的控制玩家的攻击
行会系统、好友系统以及结婚系统是否完善,玩家列表是否是当前状态的玩家列表
游戏是否有PK系统(PVE、PVP),若有,该功能是否完善
游戏是否具备组队功能,若有,该功能是否完善
物品出售时金币计算是否正确
游戏关卡的小地图显示是否正常,地图图标是否和玩家、敌人(怪物或对手)同步
游戏的记时是否连续、一致(指来电后时间继续,从来电时刻开始计时)
玩家的游戏体验是否方便
游戏说明是否与游戏操作功能保持一致
游戏界面的跳转是否正常
新手玩家的前期体验是否快速方便,玩家等级的提升是否快速,是否能给玩家带来一定的紧张刺激感
退出游戏后,游戏信息能否正确存档
......
第五项:充值与商城系统
商城内物品价格是否合理
能否通过花费的现金来兑换一定量的虚拟游戏币(基本充值功能的实现)
购买商品后,商品信息能否正确显示,使用后能否出现效果
能否通过游戏官方、支付宝、微信等支付现金来实现充值交易
点击充值按钮后能否进入官方充值网站
商城内物品的上架/下架是否及时,是否有折扣等福利性活动
......
第六项:游戏中断测试
被测游若与时间相关(游戏中有记时功能),来电后时间是否与来电前一致
游戏待机后,游戏能否暂停并关闭屏幕,并且来电或其他优先操作后,游戏能否暂停,并无其他异常现象(死机、黑屏、崩溃等)。
游戏中不同的界面来电时,来电提示正常,接听,挂断电话等操作后,返回游戏是否出现异常。
游戏中不同的界面手机来短信时,短信提示正常,回复短信后返回游戏是否出现异常
游戏中不同的界面来电时,来电提示正常,接听,挂断电话等操作后,返回游戏后游戏音效是否出现异常
游戏中不同的界面手机来短信时,短信提示正常,回复短信后返回游戏后游戏音效是否出现异常
......
第七项:游戏其他功能
游戏注册是否有实名制
游戏是否有未成年人防沉迷系统
游戏的安全防护措施是否到位(仓库锁、登录锁、游戏物品锁等)
游戏获得的成就能否通过QQ、微信、支付宝等与联系人分享
......
E. 如何制作移动app测试方案及详细流程
首先是测试资源确认及准备
(1)产品需求文档,产品原型图,接口说明文档及设计文档应该齐全
(2)测试设备及测试工具的准备:IOS和Android的不同年版本的真机,以及测试相关工具的准备。
测试用例的设计及评审
(1)根据产品需求文档,产品原型图等文档,设计客户端的一般功能测试用。
(2)测试用例评审,修改与完善,评审过后着手进入正式测试阶段
UI测试
(1)确保手头的原型图与效果图为当前最新版本,符合产品经理及用户需求。
(2)测试过程一切以效果图为准,若用户体验猛带方面有建议,先以邮件的形式与产品经理确认,确认通过后,可以正式的发出用户体验方面的问题
功能测试
(1)APP功能测试主要依据编写的功能测试用例进行软件功能的遍历
(2)涉及的测试主要包括基本功能测试,安装,卸载,运行测试,异常处理(包括网络突然中断或者网速过慢,机器内存不足等异常情况的处理)
中断测试
(1)软件运行过程中接电话,收短信,锁屏,闹铃,充电,收到通知提醒后在使用软件,软件任可以正常运行
(2)运行软件时由前台切换到后台,再切换回前台仍能继续运行
兼容性及适配器测试
(1)硬件的适配:不同手机厂商,硬件性能,不同屏幕大小的适配。
(2)OS版本的兼容。
(3)不同屏幕分辨率的适配:移动端设备的屏幕分辨率多种多样,如果app没有做合适的处理可能会显示不好,甚至影响功能的操作。
(4)兼容性测试必须放在一定数量的真机上运行,由于真机类型较多,兼容性测试的时候可以选取典型的几种运用较多的真机进行兼容性测试。
性能测试
(1)客户端性能测试注重安装卸载时间,启动时间,页面加载时间,主要功能占用的床铺,内存,流量,耗电量等,以及与同类产品相比较是否具有优势。
(2)至于服务器端的性能,主要利用接口对服务器进行加压,重点关注相应时间,吞吐量,并发数,事务通过率等。
稳定性测试
(1)安卓app的稳定性常常使用monkey进行测试,通过随机事件流模拟个人操作,对检查程序的内存溢出,空指针有很大的作用
检测分析及测试报告输出
以上各种形式的APP测试结束后,应该形成完整的分析及报告文档,输出给相关人员
F. 如何进行android兼容性测试cts
二、运行CTS的方法,步骤如下:
(1)进入目录android-cts,该目录是通过上面那两种方法获得的。在android-cts目录下会有3个文件夹,其中一个是tools。
(2)进入tools目录,输入./startcts来启动CTS。
(3)如果运行成功会出现Android CTS version 2.3_r1的字样(我的android的版本是2.3的)。如果有连接设备到PC上还会出现Device(设备ID)connected的字样。这里设备可以是连接PC的android的机器,也可以是模拟器。
三、CTS测试的方法:
(1)在cts_host>下敲入help,会显示cts下的许多命令。ls –plan命令显示google自带的测试方案,如:Java、Signature、Android、CTS、VM、RefApp、Performance、AppSecurity。其中Performance这个方案是google暂不要求的。Java、Signature、Android、VM、RefApp、Appsecurity方案都是CTS方案的子集。
(2)用命令ls -d来查看已连接的设备,CTS测试之前我们必须保证至少有一个设备连接上。
(3)输入命令start –plan CTS来执行CTS测试方案,该方案有两万多条测试项目,需要很长时间,因此除了第一次测试之外,不建议这么做。我做的都是针对某些包的测试。如果连接了多个设备的话需加上-d参数,后面跟上设备id来告诉CTS需要测试的设备。
(4)对单独一个包进行测试的方法:start –plan CTS –p 包名;推荐用这种方法来进行针对性的测试。需要知道有哪些包名,可以输入命令:ls –plan CTS
(5)也可以针对单独一个case进行测试:start –plan CTS –test 类名#方法名
四、查看测试的结果:
测试生成的log在\android-cts\repository目录下以log+测试时间.txt命名。测试报告在android-cts\repository\results目录下,也是以测试时间命名。
五、注意事项:
(1)测试前需要安装一个apk:adb install -r android-cts/repository/testcases/.apk 然后在设置里面