跟测试老兵3天成为APP高手(二)

今天继续第二天的分享。

(六)ADB安卓调试桥使用

ADB的全称为Android Debug Bridge,安卓调试桥。如安装软件、卸载软件、系统升级、运行shell命令等。adb就是连接Android手机与PC端的桥梁。

可以单独从官网(developer.android.com)下载安装,也可以通过SDK manager安装。安装后,在platform-tools目录中。

使用真机或仿真机练习ADB命令;

虚拟机中连接真机时虚拟机设置:

Win7虚拟机-配置-USB控制器,选中“显示所有USB输入设备”,注意,只能在关闭虚拟机时设置。

对于仿真机安装后,具有了Root权限,而对于真机,要运行ADB命令,需要把手机设置为开发者模式。安卓手机中设置方法如下:

关于手机->版本号,连续点击几次版本号,手机激活开发者模式。在配置中打开开发者选项,打开【USB调试】模式

adb devices:查看当前连接的手机设备,包括了仿真机和真机

 

adb  install: 将指定的apk安装到手机中

语法:adb install <file>

例如:adb –s emulator-5554 install E:\CalculatorOfTwoNum.apk

-s 指定设备序列号

–r覆盖安装

当前电脑如果只有连接一部手机,则可以不指定设备,可以直接安装

adb install d:\com.sina.weibo.apk

adb  uninstall:

adb uninstall –k  <软件名>

例如:adb -s emulator-5554 –k uninstall com.sina.weibo

也可以直接:

adb shell pm uninstall -k  com.sina.weibo

-k 保留缓存内容

 

adb  pull: 从手机设备上拷贝文件到本地电脑上

例如:adb pull /system/framework/framework-res.apk d:\sj

adb  pull  /sdcard/tmp/error_fs.dat  d:\sj

 

adb  push:

adb push d:/sj/    

adb -s 4df7b6be03f2302b push f:/pass /sdcard/pass/

 

shell:

adb使用命令top -m 10 -s cpu(-t 显示进程名称,-s 按指定行排序,-n 在退出前刷新几次,-d 刷新间隔,-m 显示最大数量)

 

User  处于用户态的运行时间,不包含优先值为负进程

Nice  优先值为负的进程所占用的CPU时间

Sys   处于核心态的运行时间

Idle  除IO等待时间以外的其它等待时间

IOW   IO等待时间

IRQ   硬中断时间

SIRQ  软中断时间

  1. PID   进程id
  2. PR    优先级
  3. CPU%  当前瞬时CPU占用率
  4. S     进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
  5. #THR  程序当前所用的线程数
  6. VSS   Virtual Set Size  虚拟耗用内存(包含共享库占用的内存)
  7. RSS   Resident Set Size 实际使用物理内存(包含共享库占用的内存)
  8. PCY   调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
  9. UID   进程所有者的用户id
  10. Name  进程的名称

查看某个app占用手机内存情况

使用下面命令dumpsys meminfo <package_name>或dumpsys meminfo <package_id>

android程序内存被分为2部分:nativedalvikdalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。android程序内存一般限制在16M,当然也有24M的。

adb shell dmesg,打印出内核的调试信息

adb shell chmod 644 /system/framework/framework-res.apk

adb forward tcp:5555 tcp:8000,可以设置任意的端口号

adb bugreport:查看bug报告

adb shell   :设置查看无线通讯日志

logcat –b redio

adb get-product :获取设备的ID和序列号

adb get-serialno

adb reboot

app上截屏

C:\Users\IBM>adb shell screencap -p sdcard/screen.png

把截图发送电脑某目录中

C:\WINDOWS\system32>adb pull sdcard/screen.png D:/screen.png

截图后,通过手机文件管理器可以找到截图文件

(七)Monkey可靠性使用

Monkey是一款通过命令行对app进行测试的工具,主要进行可靠性测试。

Adb shell monkey,给指定的设备发送伪随机的用户事件流,执行命令的效果就相当于有个手指在手机上点击。

 

什么是monkey呢?

顾名思义,Monkey英文单词是猴子,Monkey test就像一只猴子在电通过脑前面胡乱敲击键盘。通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作对设备上的程序进行压力测试,检测多长时间会发生异常。主要是测试App多久会crash(闪退或崩溃)。

Monkey介绍:

(1) Monkey程序由Android系统自带,使用Java语言编写,在Android文件系统中的存放路径是: /system/framework/monkey.jar;   
(2) Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;  
(3)Monkey 命令启动方式:    
  a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试。          

b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试  

Monkey执行原理图:        

c) 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

Monkey弱点:

Monkey虽然可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取待测界 面的信息来执行验证操作。

Monkey的特征

  1. 测试对象仅仅为应用程序包,有一定的局限性
  2. Monkey测试使用的事件流数据流是随机的,不能进行自定义
  3. 可对Monkeytest对象,事件数量,类型,频率等进行设置

 

Monkey的基本用法:

$ adb shell monkey [options]

如果不指定optionsMonkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:

$ adb shell monkey -p your.package.name -v 500

 

例如:

 

 

adb shell monkey –p com.tencent.mobileqq –v 500

adb shell monkey –p com.tencent.mobileqq –v 500

 

 

Monkey参数大全:

 

 

-p <允许的包名列表>         

用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。  

指定一个包:adb shell monkey -p com.shjt.map 100   

指定多个包:adb shell monkey -p fishjoy.control.menu  –p com.shjt.map  100  

-v        

用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示: 

Level 0  :  adb shell monkey -p com.shjt.map -v 100               // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息   

Level 1  :  adb shell monkey -p com.shjt.map -v  -v 100          // 提供较为详细的日志,包括每个发送到Activity的事件信息

Level 2  :  adb shell monkey -p com.shjt.map -v  -v  -v 100     // 最详细的日志,包括了测试中选中/未选中的Activity信息


-s(随机数种子)            

用亍指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。  示例:

monkey测试1:adb shell monkey -p com.shjt.map –s 10 100                

monkey测试2:adb shell monkey -p com.shjt.map –s 10 100  


--throttle <毫秒>            

用亍指定用户操作(即事件)间的时延,单位是毫秒;如果丌指定这个参数,monkey会尽可能快的 生成和发送消息。 示

例:adb shell monkey -p com.shjt.map --throttle 3000 100 

Monkey日志分析

正常情况,如果Monkey测试顺利执行完成,在log的最后会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成\

 异常情况

Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)
1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)  肯定是有bug

Monkey 执行中断, 在log最后也能看到当前执行次数

重视Crash

虽然Monkey测试有部分缺陷,我们无法准确地得知重现步骤, Monkey测试所出现的NullPointException,  都是可以在用户使用时出现的, 何时出现只是时间问题

理论上来说,  Monkey所有的Crash 都需要在发布前修复掉

2.-p 指定被测应用的包名 例:adb shell monkey -p com.UCMobile.x86 100 如果想要指定多个包名,每一个包名要跟一个-p 例:adb shell monkey -p packageName1 -p packageName2 100

 

Monkey测试的停止条件

Monkey Test执行过程中在下列三种情况下会自动停止:

1、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。

2、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。

3、如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。

通过多次并且不同设定下的Monkey测试才算它是一个稳定性足够的程序。

 

 

 

Adb shell monkey –p packagename,对指定名称的包进行测试。

 

 

全部命令举例:

1.-help   查看monkey的帮助信息

  例:adb shell monkey –help

 

2.-p 指定被测应用的包名 例:adb shell monkey -p com.UCMobile.x86 100 如果想要指定多个包名,每一个包名要跟一个-p 例:adb shell monkey -p packageName1 -p packageName2 100

 

3. COUNT 设置执行的次数 例:adb shell monkey 100

 

4.-s 设置种子数(相当于设置一个路径,因为monkey是随机事件,所以为了使回归路径一致就需要设置相同的seed值) 例:adb shell monkey 100 -s 5 如果想重现上面例子的路径下次执行的-s也必须为5

 

5.--throttle 设置每次随机事件的时间间隔(单位:毫秒) 例:adb shell monkey 100 --throttle 500

 

6.--throttle time --randomize-throttle 设置随机时间的时间间隔区间 例:adb shell monkey 100 --throttle 500 --randomize-throttle 说明:执行一百次monkey随机事件,每次事件的间隔在0到500毫秒之间不固定。

 

7.-v 设置日志级别最多(默认一个-v) 例:adb shell monkey -v 100 如需更详细的日志可以加多个-v,最多3个 例:adb shell monkey -v -v -v 100

 

8.--ignore-crashes 运行中忽略crash,遇到crash依然把后面的事件跑完 例:adb shell monkey --ignore-crashes -v 100

 

9.--ignore-timeouts 运行中忽略ANR,遇到ANR依然把后面的事件跑完 例:adb shell monkey --ignore-timeouts -v 100

 

10.设置事件百分比,所有的百分比加起来不能超过100% 0:触摸事件百分比,即参数--pct-touch 1:滑动事件百分比,即参数--pct-motion 2:缩放事件百分比,即参数--pct-pinchzoom 3:轨迹球事件百分比,即参数--pct-trackball 4:屏幕旋转事件百分比,即参数--pct-rotation 5:基本导航事件百分比,即参数--pct-nav 6:主要导航事件百分比,即参数--pct-majornav 7:系统事件百分比,即参数--pct-syskeys 8:Activity启动事件百分比,即参数--pct-appswitch 9:键盘翻转事件百分比,即参数--pct-flip 10:其他事件百分比,即参数--pct-anyevent 例:adb shell monkey --pct-touch 20 -v 100

 

11.--ignore-native-crashes 忽略monkey本身的异常,直到事件执行完毕 例:adb shell monkey --ignore-native-crashes -v 100


日志分析:

Events injected: 100

## Network stats: elapsed time=10402ms (0ms mobile, 0ms wifi, 10402ms not connec

ted)

 

C:\Users\IBM>adb shell monkey -v-v-v -p com.android.calculator2 100

:Monkey: seed=1507321806111 count=100

:AllowPackage: com.android.calculator2

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

各种事件所占的比例,用数字表示

// Event percentages:

//   0: 15.0%

//   1: 10.0%

//   2: 2.0%

//   3: 15.0%

//   4: -0.0%

//   5: 25.0%

//   6: 15.0%

//   7: 2.0%

//   8: 2.0%

//   9: 1.0%

//   10: 13.0%

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.categ

ory.LAUNCHER;launchFlags=0x10200000;component=com.android.calculator2/.Calculato

r;end

    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.in

tent.category.LAUNCHER] cmp=com.android.calculator2/.Calculator } in package com

.android.calculator2

:Sending Touch (ACTION_DOWN): 0:(459.0,202.0)

:Sending Touch (ACTION_UP): 0:(452.0924,201.62823)

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(-5.0,-3.0)

:Sending Touch (ACTION_DOWN): 0:(439.0,173.0)

:Sending Touch (ACTION_UP): 0:(445.65695,160.60785)

:Sending Flip keyboardOpen=false

:Sending Touch (ACTION_DOWN): 0:(47.0,244.0)

:Sending Touch (ACTION_UP): 0:(27.603859,249.00941)

:Sending Touch (ACTION_DOWN): 0:(95.0,328.0)

:Sending Touch (ACTION_UP): 0:(104.73534,324.80264)

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-1.0)

:Sending Touch (ACTION_DOWN): 0:(676.0,1025.0)

:Sending Touch (ACTION_UP): 0:(689.5133,1032.2502)

:Sending Touch (ACTION_DOWN): 0:(190.0,600.0)

:Sending Touch (ACTION_UP): 0:(186.25455,600.4463)

Events injected: 100

:Sending rotation degree=0, persist=false

:Dropped: keys=0 pointers=1 trackballs=0 flips=0 rotations=0

## Network stats: elapsed time=7139ms (0ms mobile, 0ms wifi, 7139ms not connecte

d)

// Monkey finished

 

说明:

1.Monkey: seed=1470511671524 count=100 monkey执行的seed值和随机事件次数

2.AllowPackage: com.UCMobile.x86 可以运行的包名

3.// Event percentages: // 0: 15.0% // 1: 10.0% // 2: 2.0% // 3: 15.0% // 4: -0.0% // 5: -0.0% // 6: 25.0% // 7: 15.0% // 8: 2.0% // 9: 2.0% // 10: 1.0% // 11: 13.0% 分配事件的百分比,事件号可以参考第二部分

4.事件0:触摸事件 Sending Touch (ACTION_DOWN): 0:(572.0,1105.0) Sending Touch (ACTION_UP): 0:(576.20734,1105.024)

5. 事件1:滑动事件 Sending Touch (ACTION_DOWN): 0:(233.0,761.0) Sending Touch (ACTION_MOVE): 0:(208.49568,736.34766) Sending Touch (ACTION_MOVE): 0:(202.7063,729.8338) Sending Touch (ACTION_MOVE): 0:(183.89723,722.677) Sending Touch (ACTION_UP): 0:(174.83568,721.8229)

6.事件2:缩放事件 Sending Touch (ACTION_DOWN): 0:(107.0,242.0) Sending Touch (ACTION_POINTER_DOWN 1): 0:(108.14705,248.53061) 1:(270.0,262.0) Sending Touch (ACTION_MOVE): 0:(110.117355,252.96329) 1:(267.9937,262.25485) Sending Touch (ACTION_MOVE): 0:(111.30056,261.88846) 1:(261.90106,262.58475) Sending Touch (ACTION_MOVE): 0:(113.11743,265.60138) 1:(253.92662,263.13382) Sending Touch (ACTION_POINTER_UP 1): 0:(113.29031,267.4419) 1:(248.60628,263.23257)

7.事件3:轨迹球事件 Sending Trackball (ACTION_MOVE): 0:(3.0,-2.0) Sending Trackball (ACTION_MOVE): 0:(1.0,-1.0)

8.事件4:屏幕旋转事件(隐藏事件) Sending rotation degree=0,persist=true

9.事件5:导航事件(上下左右) Sending Key (ACTION_DOWN): 21 // KEYCODE_DPAD_LEF

10.事件6:主要导航事件(menu等) Sending Key (ACTION_DOWN): 23 // KEYCODE_DPAD_CENTER

11.事件7:系统按键事件(音量,home,返回按键等) Sending Key (ACTION_UP): 25 // KEYCODE_VOLUME_DOWN

12.事件8:启动应用事件 Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.UCMobile.x86/com.UCMobile.main.UCMobile;end

13.事件9:键盘事件(隐藏显示键盘) Sending Flip keyboardOpen=true

14.事件10:其他按键 Sending Key (ACTION_DOWN): 66 // KEYCODE_ENTER Sending Key (ACTION_UP): 66 // KEYCODE_ENTER

15.延时11: Sleeping for 300 milliseconds

 

(八)UIAutomatorviewer的使用

在SDK安装目录的tools目录下有uiautomatorviewer.bat,运行查看手机对象属性。

uiautomatorviewer:扫描和分析Android应用程序的UI控件的工具。

熟悉控件获取的同学都知道,使用uiautomatorviewer可以抓取到的用来定位控件的元素大概有

text

resource-id

content-desc

index

除此之外,appium还支持按Xpath来定位控件

需要安装增强插件:(jar包文件,不好上传,单独沟通)

把该jar文件拷贝到android安装目录的/tools/lib目录下,替换原来的UIAutomatorViewer.jar,替换后,在tools中执行uiautomatorviewer.bat即可启动。

 

 

 

 

Xpath和元素定位相关的语法,参见博文:

http://blog.csdn.net/kaka1121/article/details/51811296

从上文中可以看出,uiautomatorviewer抓取出来的属性,可统一用Xpath方式来获取,可以较大地简化代码,我们只需要定义一个优先级策略即可。

 

工具设计思路

首先,前端开发同学也需要定位元素,通常使用resource-id或text,因此大部分关键元素都会有唯一的resource-id或text,列表除外。

其次,少量元素会有 content-desc,且唯一;

再次,index是每个元素都有的,也是最不靠谱的一个;

除此之外,Xpath本身作为DOM,本身会根据元素类型(在此工具中叫class)维护一个顺序,本文中称之为“元素索引”;

综上,可以定义如下优先级:

1.resource-id

2.text

3.content-desc

4.元素索引

5.index(因其不可预知,弃用)

这里要说明一下xpath的元素索引和index的区别

xpath的元素索引上面已经说了,序列从1开始(IE除外,统一方法,见下面图片)

index作为手机端的节点属性,一般是从0开始的,但是有很多也是从非零开始的,非常不可预知,完全受编程人员支配,也和class无关。

 

(九)Monkeyrunner 使用

Monkeyrunner介绍:

monkeyrunner即android SDK中自带的工具之一,此工具提供API可访问android设备或模拟器。

monkeyrunner提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。

monkeyrunner工具的主要目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。

工具原理:

Monkeyrunner工具是在工作站上通过API定义的特定命令和事件控制设备或模拟器。

多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。

功能测试:monkeyrunner可以为一个应用自动化功能测试。为您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。       

回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。       

可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner    API之外,您还可以使用标准的Python    os和subprocess模块来调用如adb这样的Android工具。

 

主要包括三个模块

1、MonkeyRunner:这个类提供了用于连接monkeyrunner和设备或模拟器的方法,它还提供了用于创建用户界面显示提供了方法。

2、MonkeyDevice:代表一个设备或模拟器。这个类为安装和卸载包、开启Activity、发送按键和触摸事件、运行测试包等提供了方法。

3、MonkeyImage:这个类提供了捕捉屏幕的方法。这个类为截图、将位图转换成各种格式、对比两个MonkeyImage对象、将image保存到文件等提供了方法。

 

#引用导入API
from com.android.monkeyrunner import  

 

运行monkeyrunner

命令语法为:

monkeyrunner -plugin   

 

方式一:在CMD命令窗口直接运行monkeyrunner

方式二:使用Python编写测试代码文件,在CMD中执行monkeyrunner Findyou.py运行

不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。

 

注意:在运行monkeyrunner之前必须先运行相应的模拟器或连接真机,否则monkeyrunner无法连接到设备

运行模拟器有两种方法:1、通过eclipse中执行模拟器 2、在CMD中通过命令调用模拟器

这里介绍通过命令,在CMD中执行模拟器的方法

启动仿真机

在cmd窗口,输入命令:emulator -avd GalaxyNexus,其中GalaxyNexus是模拟器的名称,填写自己创建的模拟器名称。

 

命令行输入:monkeyrunner,启动

注意是按ctrl+d退出

进入shell命令交互模式后,首要导入monkeyrunner所要使用的模块。直接在shell命令下输入命令:

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice

再回车,这步完成我们就可以利用monkeyrunner进行测试工作了。(如果不能工作,可以把MonkeyRunner,MonkeyDevice分别导入)

 

模拟器连接

device=MonkeyRunner.waitForConnection(6,’emulator-5554′)
参数1:超时时间,单位秒,浮点数,默认是无限期地等待。
参数2:指定的设备名称device_id,默认为当前设备(手机优先,其次为模拟器)

 

安装apk

输入命令:device.installPackage('d:\\FishBone_dakai_v1.5.3.5015.apk'),其中,参数是APK路径。安装成功返回true,此时查看模拟器上安装的APK图标。

 

app启动

app安装成功后,现在启动该app,命令为:

device.startActivity(component="package名/activity")

启动鱼骨app,则如下:

device.startActivity(component="com.yugusoft.fishbonelocal/com.yugusoft.fishbone.ui.LogoActivity")

上面所有执行脚本可以整理到一个python文件中,例如命名为mtest.py。

在命令行下运行脚本:monkeyrunner  d:\yugutest.py  同样能够执行上面一步一步的脚本。

monkeyrunner  d:\sdk\tools\xlwb.py

from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice

device=MonkeyRunner.waitForConnection(6,'Y9K7N15303005862')

device.installPackage('F:\\FishBone_dakai_v1.5.3.5015.apk')

MonkeyRunner.sleep(5.0)

device.startActivity(component="com.yugusoft.fishbonelocal/com.yugusoft.fishbone.ui.LogoActivity")

运用举例:

卸载旧的APP、安装新的APP

方式一:

1.打开CMD,运行monkeyrunner

2.进入monkeyrunner的shell命令交互模式后,逐条输入以下命令

1 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
2 device = MonkeyRunner.waitForConnection()
3 device.removePackage('cn.richinfo.thinkdrive')
4 device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')

 

方式二:

 

a. 编写Python测试代码

# File:   Test1.py
# Vision: V1.0
# Author: Findyou
# 引入本程序所用到的模块
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

# 连接手机设备
device = MonkeyRunner.waitForConnection()

# 截图
result = device.takeSnapshot()
# 将截图保存到文件 
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')

# 卸载APP
device.removePackage('cn.richinfo.thinkdrive')
print ('Uninstall Success!')

# 暂停5秒
MonkeyRunner.sleep(5)

# 截图
result = device.takeSnapshot()
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_002.png','png')

# 安装新的APP
device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
print ('Install Success!')

# 截图
result = device.takeSnapshot()
result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_003.png','png')

注:拷贝运行时请去掉中文注释;或者在开头加入 #coding=utf-8 

 

b.执行Test1.py脚本

Monkeyrunner E:\JAVA\monkeyrunner\Test1\Test1.py

 

MonkeyRunner Command Summary

1. #导入模块;
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

    还可起别名:
    from com.android.monkeyrunner import MonkeyRunner as mr

    from com.android.monkeyrunner import MonkeyDevice as md

    from com.android.monkeyrunner import MonkeyImage as mi


2. #连接当前设备,并返回一个MonkeyDevice对象;
    device = MonkeyRunner.waitForConnection(float timeout, string deviceID)  // 第一个参数为等待连接设备时间,第二个参数为具体连接的设备
 
3. #安装Android包,注意,此方法返回的返回值为boolean,由此可以判断安装过程是否正常 ;
    device.installPackage('myproject/bin/MyApplication.apk')
     print ('True')
   device.removePackage ('com.example.android.notepad')
     print ('False')

4. #启动一个Activity;
   device.startActivity(component='com.android.htccontacts/com.android.htccontacts.ContactsTabActivity')
   device.startActivity(component = "com.metek.weather/.activity.SettingActivity")

5. #截图;
    result = device.takeSnapshot()
    result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')

6. #延时(秒);
    MonkeyRunner.sleep(3)

7. #滑动屏幕;
    for i in range(1,70):

        device.drag((250,850),(250,110),0.1,10)  //开始,结束,持续时间,步骤  

    for i in range(1,70):
       device.drag((250,110),(250,850),0.1,10)
   MonkeyRunner.sleep(1)

8. #触击屏幕;
    device.touch(507,72,"DOWN_AND_UP")

9. #执行adb shell命令;

    device.shell("input text goup01")

10. #按键
    按下HOME键     device.press('KEYCODE_HOME','DOWN_AND_UP')

 

相应的按键对应的名称如下:

menu键:KEYCODE_MENU

home键:KEYCODE_HOME

back键:KEYCODE_BACK

search键:KEYCODE_SEARCH

call键:KEYCODE_CALL
end键:KEYCODE_ENDCALL
上导航键:KEYCODE_DPAD_UP
下导航键:KEYCODE_DPAD_DOWN
左导航键:KEYCODE_DPAD_LEFT
右导航键:KEYCODE_DPAD_RIGHT
ok键:KEYCODE_DPAD_CENTER
上音量键:KEYCODE_VOLUME_UP
下音量键:KEYCODE_VOLUME_DOWN
power键:KEYCODE_POWER
camera键:KEYCODE_CAMERA


11. #输入文字

      device.type('你好exit')

12. #输入回车

     device.press('KEYCODE_ENTER')

13. #记录和回放

      *记录:

     直接在命令行中输入:monkeyrunner monkey_recorder.py

     在界面上操作然后将脚本保存为 monkey_test.mr

     *回放:

     运行保存的脚本,然后你就看到模拟器进行你刚才一样的操作:

     monkeyrunner monkey_playback.py monkey_test.mr

     注:monkey_recorder.py,monkey_test.mr,monkey_playback.py都应放在..\android-sdk-windows\tools目录下。

14. #产生help文件并保存

     monkeyrunner help.py    //format可以是text或html,outfile是包含路径的输出文件名。

(十)安装Node.js

 

要安装Appium,首先安装node.js 。node.js官方网站:https://nodejs.org/根据自己的电脑操作系统和位长下载相应的版本。

下载后,例如为node-v6.11.4-x64.msi, 安装

 

安装后,重新打开dos窗口,在命令行输入npm,如果出现下面信息,表示安装成功。

 

npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。有了npm,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。

在Path中设定node的路径。

在DOS命令行下面,输入npm,出现下面的界面表示安装成功。

 

(十一)Appium安装

在线安装和离线安装两种方式

  1. 下面通过npm在线安装Appium 

 

D:\SDK>npm install -g appium

 

2、离线安装

可以在Appium官方网站上下载操作系统相应的Appium版本。

https://bitbucket.org/appium/appium.app/downloads/

 

下载版本AppiumForWindows_1_4_16_1.zip,接压缩后,安装

 

 

安装过程中,出现下面界面

 

安装过程中,缺少微软的Framework,可能报错。这是因为Appium是由.NET 开发的,所以,它会依赖.NET framework相关组件

 

 

安装后,在path中配置appium路径。输入appium,出现如下窗口表示安装成功

 

检查环境配置是否正确:

打开Windows命令提示符,通过“appium-doctor”命令检查appium环境。

 

 

 

(十二)安装Python的安装包管理工具pip

通过pip安装比较方便。pip是一个安装和管理Python包的工具,通过pip去安装Python包将变得十分简单,我们将省去了搜索--查找版本--下载--安装等繁琐的过程。

推荐通过pip进行安装“Appium-Python-Client”。

 

pip是用来方便地管理Python的第三方包的工具。

两种安装方式:1、在线安装;2、下载后安装,https://pypi.python.org/pypi/pip#downloads

 

在线安装:

Python安装目录下,有一个scripts目录,里面有个easy_install.exe

在DOS命令行执行easy_install.exe pip  即可安装pip,以秒速安装成功,如下图:

安装结束后,出现上面的信息,表示安装成功,Scripts目录下多了pip.exe文件。

 

(十三)安装appium client端

在DOS命令行下,输入pip install appium-python-client 进行安装

安装过程截图如下:

安装完成。

                                                     

点击桌面生成的appium,启动,如果报错,缺少Framework 4.5,则需要根据提示安装即可。

启动后,单击最左边图标进行参数设定。

华为手机:

单击最右侧的箭头按钮,启动appium

在命令行输入python d:\calc-huawei.py 执行脚本

#coding=utf-8

from appium import webdriver

 

desired_caps = {}

desired_caps['platformName'] = 'Android'

desired_caps['platformVersion'] = '4.4.2'

desired_caps['deviceName'] = 'huawei6:5554'

desired_caps['appPackage'] = 'com.android.calculator'

desired_caps['appActivity'] = '.Calculator'

 

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

 

driver.find_element_by_name("1").click()

 

driver.find_element_by_name("5").click()

 

driver.find_element_by_name("9").click()

 

#driver.find_element_by_id("plus").click()

 

#driver.find_element_by_name("6").click()

 

#driver.find_element_by_id("equal").click()

 

driver.quit()

在命令行输入python d:\calc-huawei.py 执行脚本

 

今天就练习到这里,如果你能跟上进度,剩下一天就好说了。

(完)

 

 

 

 

 

 

 

 

                             

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13、安装Python的基础包工具setuptools

 

 

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

manok

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值