AndroidStudio 是Google 官方在2013 Google I/O 大会上发布的Andrid 开发IDE,专门用于开发Android项目,安装包里集成了Android SDK,不需再安装ADT,是目前主流的Android应用开发环境。
Eclipse默认只能用于开发普通的JAVA应用程序,AndroidSDK提供了开发Android应用程序所需的API库和构建、调试Android应用程序所需的开发工具
如果要通过Eclipse来开发Android应用程序,就需要另外安装AndroidSDK,默认情况下Eclipse不会和Android SDK进行关联。为了两者连接起来,Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT),ADT也需要单独安装,安装完成之后在Eclipse里经过一系列的配置,这套Android开发环境就完成了。
集成式的安卓开发工具,安装包中包含了Eclipse和Android SDK,而且是默认关联的。
如果机器是32位的就32位JDK,如果机器是64位的就安装64位JDK,安装完成后要配置环境变量JAVA_HOME和PATH。
解压到某个目录下就可以了,同样区分32位和64位,安装完成之后需要配置ANDROID_HOME(***\adt-bundle-windows-x86_64-20140321\sdk)和PATH(%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\android-4.4.2;)。
如果是连接真机就需要手机打开USB调试模式,并通过数据线与电脑连接
如果是使用模拟器不需要做以上工作,启动模拟机就可以了。
只要第二章节的ADT安装配置完成,就可以在dos里通过androidavd启动Android虚拟设备管理器。
使用最广泛的就是Genymotion模拟器,是运行最快Android模拟器,也有使用夜神模拟器的,安装启动后的操作方法和原生模拟器差别不大。
全称是AndroidDebug Brige,就是起个桥梁连接的作用,是Android SDK提供的Debug工具。借助ADB工具,我们可以管理终端设备或模拟器的状态,进行很多操作,如安装APP、升级、运行Shell命令登录。如果是终端设备,ADB就是连接Android手机与PC的桥梁,可以让用户在电脑上对手机进行全面操作;如果是模拟器,adb也可以对模拟器进行操作。
uiautomatorviewer是Android SDK提供的一个GUI工具,在**/tools/目录下。使用uiautomatorviewer可以从PC端获取一个设备或APP的UI布局结构,并且可以查看各个控件的相关属性。这是非常重要的,特别是当编写UI自动化测试代码时,就可以使用该工具获取APP的UI界面中的元素属性。
1、使用uiautomatorviewer之前必须要连接一个模拟器或真机,而且最好只有一个。
2、启动uiautomatorviewer的GUI工作界面,启动后点击左起第二个图标DeviceScreeshot,就可以捕捉到当前已连接设备的UI界面;如果要检查其他APP或其他页,就操作连接设备,然后再点击图标DeviceScreeshot重新捕获。
3、左侧是捕获到的设备或APP的某一页,可以移动鼠标选择某一个控件,右侧上方显示当前界面的布局结构,右侧下方显示所选控件的属性。点击右侧上方的黄三角按钮可以来查看不能被测试工具(如uiautomator)访问到的控件,因为这些控件只设置了有限的属性,。这种情况下你可以要求开发者为这些控件添加必要的属性,比如如果是ImageView或者ImageButton应该添加android:contentDescription属性。
如果就可以获取被点击区域的控件属性了,为实现UI自动化做准备。但如果想要知道他是如何和手机设备通信,然后获取控件信息的,就需要反编译uiautomatorviewer.jar,从源码了解它的原理。
monkey是Android SDK中自带的一个命令行工具,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;可以通过开发机器上的命令行或脚本来启动。Monkey表面上运行在开发机器上,其实是运行在模拟器/真实终端设备的adb shell中中,所以必须用其环境中的shell(/system/bin/monkey)来运行,可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。
Monkey测试一般是在产品功能稳定之后进行,专擅于对APP作长稳测试。
通过monkey命令可以模拟用户向目标程序发送随机的事件流,效果等同于手动操作APP,并产生对应的日志,开发测试人可以通过分析monkey日志定位测试过程中出现的问题,实现对APP的自动化和压力测试。
Monkey支持11种事件,主要是以下5种.....
Touch触摸事件 由屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作
Trackball滚动球事件 由一个或多个随机的移动事件组成,有时会伴随着点击事件
motion滑动事件 由屏幕上某处一个down事件、一系列随机的移动事件和一个up事件组成
nav基本导航事件 由方向输入设备的上下左右按键所触发的事件组成
majornav主要导航事件 通常会导致UI界面中的动作事件,如5-way键盘的中间键,回退 按键、菜单按键
1、测试的对象仅为应用程序包,有一定的局限性
2、使用的事件流都是随机产生的,不能自定义也不含任何的主观性
3、可以对测试的事件数量、类型和频率等参数进行设置
Monkey一般是产品相对稳定之后使用,使用步骤:
1、启动模拟器或者连接真机,使用adbdevices验必须是device状态
2、确定被测试应用的PackageName
3、开始使用monkey发送测试命令(通过adbshell或者先进入设备的shell环境)。
当通过开发机器上的命令行(如dos)运行monkey命令时,基本语法如下:
约束选项:
-p PackageName 指定一个包名,每个Android应用都有一个唯一的包名,指定之后
Monkey将只允许系统启动这个包里的Activity。如果应用程序还需要访
问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指
定(使用多个 -p选项,每个-p选项只能用于一个包)。如果不指定任何
包,Monkey将允许启动设备系统全部包里的Activity。
常用选项:
用于指定反馈信息级别,就是日志的详细程度,总共分3个级别,
-v 仅提供启动提示、测试完成和最终结果等少量信息;
–v -v 提供较为详细的日志,包括每个发送到Activity的事件信息;
–v -v –v 提供最详细的日志,包括了测试中选中/未选中的Activity信息
事件选项:
--throttle 毫秒 每两组事件流(一个touch事件流有一个action-up和一个action-down
组成)之间sleep一段时间,模拟用户的真实使用场景,只有在俩v或三
v时才生效;如果不指定,系统会尽快的发送事件流,造成太大压力也
不便于观察。
-s seed值 如果指定了伪随机数生成器的seed值,就会产生固定事件流,如果用
相同的seed值再次运行Monkey,它将生成相同的事件序列。如果不指
定,seed值就随机产生,事件流也是随机产生的
--pct-touch * 指定触摸/点击事件在事件流中的百分比
--pct-trackball * 指定滚轮事件在事件流中的百分比
--pct-motion * 调整motion事件在事件流中百分比。
--pct-nav * 调整基本导航事件在事件流中百分比。
--pct-majornav 调整主要导航事件在事件流中的百分比
调试选项:
--ignore-crashes 通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。
如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
--ignore-timeouts 通常,当应用程序发生任何超时错误(如“Application Not Responding”
对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向
系统发送事件,直到计数完成。
--monitor-native-crashes 监视并报告Android系统中本地代码的崩溃事件
随机事件数: 最后指定
#coding=gbk
import os #import 导入一些系统设置
import os.path
##第一步##获取正在连接的设备并存入ds[]数组中
os.system("cls") #os.popen(): 执行系统命令,和os.system功能类似
print "adb devices检查设备..." #print: 向屏幕输出信息,参数可以是数组或字符串
rt = os.popen('adb devices').readlines() #popen的readlines属性: 把输出的每一行信息(连续多个空行就用一个'\n'代替)当做一个元素,生成一个数组并返回
n = len(rt) - 2 #len(): 如果是数组就计算元素个数,-2是因为第一行不是设备,最后一个是'\n'
print rt
print "检测到" + str(n) + "台设备:" #str(): 如果参数是数值,就转换成字符串
if n == 0:
print "python结束运行......"
exit()
ds = range(n) #range(): range(1,5)返回从1到4的数组;range(5)返回从0到4的数组,python的数组是可变的
for i in range(n): #for..in..: 遍历数组逐个循环,这段循环的作用就是把检测到的所有设备赋值到ds[]数组中,并逐个打印出来
nPos = rt[i+1].index("\t") # '\t' 制表符,作用是换行显示
ds[i] = rt[i+1][:nPos]
print str(i+1) + " - " + ds[i]
print " "
##第二步##从ds[]数组选择一个设备存入dev中
nSel = 1
if n == 1: #if或for语句块 没有结束标志,语句块内每行必须一个tab键(不能用空格)缩进,某一行不缩进就代表语句块结束了。
dev = ds[0]
elif n > 1:
nSel = input("选择设备编号:") #input(): 返回数值类型,如int,float
dev = ds[nSel-1]
##第三步##这以上的代码就为了获取这个34行的dev,以下代码是创建***.cmd文件
fn = raw_input("输入文件(夹)名:") #raw_input(): 返回字符串类型,如string
if not os.path.isdir("D:\\" + fn): #os.path.isdir(): 判断文件夹是否存在,返回boolean值
os.mkdir("D:\\" + fn) #os.mkdir(): 创建文件夹
fd = open(fn + '.cmd', 'w') #open(): 打开文件,返回文件句柄
fd.write("@set number=0\n")#set在dos里定义变量
fd.write(":loop\n")#cmd脚本的标签,与goto语句一起使用
fd.write("adb -s ")#指定设备的命令
fd.write(dev)
fd.write(" shell monkey -p com.android.browser --monitor-native-crashes --pct-touch 80 --pct-motion 15 \
--pct-nav 5 -s %random% -v -v --throttle 500 320000 >d:\\")#-s %random%的意思是防止产品相同的时间避免重复执行同一种动作
fd.write(fn)
fd.write("\\%random%.log\n")
fd.write("@ping -n 15 127.1 >nul\n")#ping自己15次用来延迟
fd.write("adb -s ")
fd.write(dev)
fd.write(" reboot\n")#reboot指定的真机或模拟器,模拟器可能无法重启
fd.write("@ping -n 100 127.1 >nul\n")
fd.write("@set /a number=number+1\n")#dos里/a是加,/y是复制
fd.write("@if %number%==5 exit\n")#pause是按任意键继续......
fd.write("@goto loop")
fd.close() #关闭文件
print "批处理生成完毕"
Second、执行cmd脚本
Third、Windows计划任务