自动化实战-初识自动化测试

0.背景

最近有个需求,需要在不人工介入的情况下全自动获取app运行过程中的各种敏感行为,如打电话、录音、拍照等。有的小伙伴可能会想通过解析apk中的manifest文件即可,但这里的需求是要具体到在哪使用的,单纯解析manifest文件中的权限申请还不够准确并且有些行为不用申请权限也能做,比如获取设备运行的应用列表。
如果想实现这个需求那么就需要将应用的业务逻辑全触发一遍,那如何全自动触发应用的业务逻辑呢,这就需要用到自动化测试相关的框架,所以对目前比较流行的自动化测试框架进行了简单的学习了解,这里做个学习记录。

1.什么是自动化测试?应用场景是什么

自动化测试就是通过机器代替人工来对测试目标进行测试,测试人员通过编写测试脚本并在脚本的实际运行中添加对业务逻辑的判断,实现测试自动化。一般QA团队应该用的比较多,虽然咱不是搞质检的但自动化功能还是有学习意义的,像一些做游戏外挂,抢红包,视频刷赞,刷阅读量的也都会用到这类功能。

2.常见的自动化测试框架有哪些?有什么不同

下面对目前比较常见的几个自动化测试框架的使用和区别做个大概介绍。

2.1.Monkey

工具介绍:第一个比较有名的自动化测试工具:Monkey,为什么叫Monkey?因为该工具通过不断对目标应用发送随机的事件完成测试,就像顽皮的猴子在键盘上乱跳一样。Monkey主程序由Android系统自带的,使用Java语言编写,在Android文件系统中的路径是:/system/framework/mokey.jar,Monkey.jar程序由一个名为monkey的shell脚本启动执行,shell脚本路径是:/system/bin/mokey;

bullhead:/ # ls -l /system/framework/monkey.jar
-rw-r--r-- 1 root root 318 2009-01-01 16:00 /system/framework/monkey.jar
bullhead:/ # cat /system/bin/monkey
# Script to start "monkey" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/monkey.jar
trap "" HUP
for a in "$@"; do
    echo "  bash arg:" $a
done
exec app_process $base/bin com.android.commands.monkey.Monkey "$@"

测试原理:通过向系统发送伪随机的用户事件流,如点击事件、输入事件、手势事件等,实现对目标应用程序的压力测试。通常也称为随机测试或稳定性测试。
使用介绍:

  • 方法1.在PC端使用"adb shell mokey {+命令参数}"命令即可开始Monkey测试;
  • 方法2.先通过adb shell进入android系统,再通过"mokey {+命令参数}"命令来开始Monkey测试;

测试完成后Monkey会输出Monkey finished字符串
Monkey的参数主要分为三种:分别是基础参数、事件参数、调试参数;

基础参数:

-help:列出使用说明
-v:执行过程中的日志等级,默认等级为level1,-v -v表示level2,-v -v -v表示level3,级别越高输出的日志越详细,该日志主要供开发人员查找bug原因时使用。
-p:指定需要测试的应用包名,多个应用需要多个-p指定

事件参数:

-s:表示伪随机数生成器的seed值,如果用相同的seed值再次运行monkey则将会生成相同的时间序列
--throttls:在事件之间插入固定的时间(毫秒)延迟,可以通过设置该值来缓解Monkey的运行速度,一般设置为300毫秒,因为实际用户的操作最快300毫秒左右一个动作事件。
--pct-touch:常用参数、调整触摸事件的百分比。(触摸时间指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)比如一个应用%80都是触摸操作,那么就可以将该参数的百分比设置成相对较高的百分比。(adb shell mokey --ptr-touch 100 -v -p 10)
--pct-motion:常用参数、调整motion时间的百分比。(motion事件是由屏幕上某处一个down时间、一系列伪随机的移动事件和一个up时间组成)
--pct-trackball:调整滚动球事件的百分比。
--pct-nav:调整基本的导航事件百分比。
--pct-majornav:调整主要导航事件的百分比。
--pct-syskeys:调整系统事件百分比。比如Home、Back、Start Call、EndCall、音量调节等。
--pct-appswitch:调整activity启动的百分比。
--pct-anyevent:调整其他事件的百分比。比如按键、其他在设备上不常用的按钮等。

调试参数:

--dbg-no-events:设置此选项、Monkey将执行初始启动,进入一个测试activity,并不会进一步生成事件。
--hprof:设置此项,Monkey将在生成事件序列前后生成一个profilling报告。在data/misc路径下生成一个大约5mb的文件。
--ignore-crashes:一般应用发生崩溃或异常时Monkey会停止运行,如果设置了此项,Monkey将继续发送事件给系统,直到事件计数完成。
--ignore-timeouts:一般应用程序发生任何超时错误,比如"Application Not responding"对话框,Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--ignore-security-exception:当程序发生许可错误时,比如启动一些需要许可的activity导致的异常,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--kill-process-after-error:当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。设置此项,将会通知系统停止发生错误的进程。
--monitor-native-crashes:监视并报告android系统中本地代码的崩溃事件,如果设置--kill-process-after-error,系统将停止运行。
--wait-dbg:停止执行中的Monkey,直到有调试器和它连接。

举个例子

adb shell monkey  -p com.ljhhr.mobile --throttle 380 -v -s 3500 300000 >C:\monkey_log.txt

解释下上述命令:

-p com.ljhhr.mobile:对包名为com.ljhhr.mobile的应用进行测试
--throttle 380:在事假之间插入380毫秒的延迟时间
-v:设置日志等级为level1
-s 3500:设置伪随机数生成器的seed值为3500
300000:表示测试事件数为300000条
> C:\mokey_log.txt:将测试过程中的输出重导向到mokey_log.txt文件中
2.2.MonkeyRunner

工具介绍:MonkeyRunner工具是使用Jython写出来的(Jython就是使用Java编程语言实现的Python),已经集成在了Android SDK中。工具提供了多个API,通过这些API写一个Python程序来模拟操作Android设备上的app,测试app的稳定性并通过截图来记录出现的问题。这里要说明一下,MonkeyRunner和前面第一个工具Monkey没有任何关系。和Monkey相比MonkeyRunner的功能更强大,支持脚本编写,控制触发时间和截图,但缺点是只能运行在PC端。而Monkey支持脱机使用(就是不连接电脑)。
测试原理:运行在PC上,通过服务端/客户端的模式向设备上的android应用发送指令来执行测试。用户可以通过MonkeyRunner提供的API编写测试脚本来控制需要测试的事件。支持屏幕点击、拖拽、长按、键盘事件、智能截图对比和判断、回溯出详细具体的BUG路径等功能。
使用介绍:
环境:需要安装这些工具有jdk、android sdk、python。
MonkeyRunner API主要分为三个模块
MonkeyRunner类:

waitForConnection(float timeout,string deviceid):连接真机和模拟器
alert():创建用户界面实现信息

MonkeyDevice类:代表一个设备或模拟器。

installPackage(string apkpath):安装应用
starActivity(string package+'/'+activity):启动应用
drag(tuple start,tuple end,float duration,integer steps):拖拉控件,duration表示手势持续时间
touch(inte
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值