近期面试APP开发者的时候,遇到了技术总监问 APP測试的概念性问题。后面感觉主要的项目流程、项目逻辑、屏幕适配、

測试是全然没有问题的。可是对于APP的性能測试、压力測试等高端的測试。还是存在着美中不足之处呀,毕竟是搞专业的APP开发

人员。

可是,自己追求APP开发的流程是永不止境的,所下面定决心去了解深挖一下APP的測试,饿补一下APP的高端測试流程及其常

用工具。

近期開始研究Android自己主动化測试方法。对当中的一些工具、方法和框架做了一些简单的整理。当中包含android測试框

架、CTS、Monkey、Monkeyrunner、benchmark、其他test tool等等。因接触时间非常短,非常多地方有不足之处。希望能和大家多多交

流。

以下先了解一个经常使用的測试工具:

一、什么是monkeyrunner
monkeyrunner工具提供了一个API。使用此API写出的程序能够在Android代码之外控制Android设备和模拟器。

通过monkeyrunner,您能够写出一个Python程序去安装一个Android应用程序或測试包,执行它,向它发送模拟击键。截取它的用户界面图片。并将截图存储于工作站上。

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

二、monkeyrunner工具同Monkey工具的区别
Monkey:
Monkey工具直接执行在设备或模拟器的adb shell中。生成用户或系统的伪随机事件流。

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

三、monkeyrunner的測试类型
1、多设备控制:monkeyrunner API能够跨多个设备或模拟器实施測试套件。您能够在同一时间接上所有的设备或一次启动所有模拟器(或统统一起)。根据程序依次连接到每个,然后执行一个或多个測试。您也能够用程序启动一个配置好的模拟器,执行一个或多个測试,然后关闭模拟器。
2、 功能測试: monkeyrunner能够为一个应用自己主动贯彻一次功能測试。

您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
3、 回归測试:monkeyrunner能够执行某个应用。并将其结果截屏与既定已知正确的结果截屏相比較,以此測试应用的稳定性。
4、 可扩展的自己主动化:因为monkeyrunner是一个API工具包,您能够基于Python模块和程序开发一整套系统,以此来控制Android设备。

除了使用monkeyrunner API之外,您还能够使用标准的Python os和subprocess模块来调用Android Debug Bridge这种Android工具。

四、执行monkeyrunner
您能够直接使用一个代码文件执行monkeyrunner,抑或在交互式对话中输入monkeyrunner语句。

不论使用哪种方式。您都须要调用SDK文件夹的tools子文件夹下的monkeyrunner命令。假设您提供一个文件名称作为执行參数。则monkeyrunner将视文件内容为Python程序,并加以执行;否则。它将提供一个交互对话环境。
monkeyrunner的命令语法为:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

五、实例
以sample中的ApiDemos为例,先将其生成ApiDemos.apk。

前提:已有device连接
1、 将ApiDemos.apk放在$Android_Root\tools下。
2、 在$Android_Root\tools下新建一个monkeyrunnerprogram.py文件,里面内容为:

# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()
# Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.
device.installPackage('./ApiDemos.apk')
# Runs the component
device.startActivity(component='com.example.android.apis/.ApiDemos')
# Presses the Menu button
device.press('KEYCODE_MENU','DOWN_AND_UP')
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile('./shot1.png','png')

3、 打开命令行转到Android_Root\tools文件夹下执行一下命令:

monkeyrunner monkeyrunnerprogram.py

110307 15:33:19.625:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.

110307 15:33:20.625:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.

110307 15:33:21.625:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] Error starting command: monkey --port 12345

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]com.android.ddmlib.ShellCommandUnresponsiveException

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:408)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at com.android.ddmlib.Device.executeShellCommand(Device.java:276)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at com.android.monkeyrunner.adb.AdbMonkeyDevice$1.run(AdbMonkeyDevice.java:89)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.Executors$RunnableAdapter.call(UnknownSource)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.FutureTask.run(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.util.concurrent.ThreadPoolExecutor$Worker.run(UnknownSource)

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]  at java.lang.Thread.run(UnknownSource)

110307 15:33:57.437:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: press KEYCODE_MENU.

110307 15:33:59.171:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: quit.

注:里面exception的提示我们能够忽略。由于我们能够看见 Monkey Command: press KEYCODE_MENU已经运行成功。

4、 能够Android_Root\tools下查看生成的shot1.png的截图。

六、实例扩展

由于ApiDemos首页上按下MENU键没有菜单出现,为了更加形象化,在实例五的基础上继续试验:

1、 在$Android_Root\tools下新建一个monkeyrunnerprogram1.py文件。里面内容为:

# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile('./shotbegin.png','png')
# Presses the Down button
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile('./shotend.png','png')

2、  将画面定位在Apidemos的首页。并将光标定位在第一项上。

3、  在$Android_Root\tools文件夹下执行一下命令:
monkeyrunner monkeyrunnerprogram1.py

Android測试APP工具(一)相关推荐

  1. (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试

    Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...

  2. 你的第一个AngularJS应用--教程二:基架、建立和測试的工具

    介绍 有非常多可用的工具能够帮助你开发AngularJS 应用,那些非常复杂的框架不在我的讨论范围之中,这也是我開始这系列教程的原因. 在第一部分,我们掌握了AngularJS框架的基本结构,开发了第 ...

  3. Android单元測试之JUnit

    随着近期几年測试方面的工作慢慢火热起来.常常看见有招聘測试project师的招聘信息.在Java中有单元測试这么一个JUnit 方式,Android眼下主要编写的语言是Java,所以在Android开 ...

  4. Android自己主动化測试之Monkeyrunner用法及实例

    眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但事实上是完全然全不同的两个工具,应用在不同的測试领域.总的来说,monke ...

  5. 第4代白盒測试方法介绍--理论篇

    关键词: 白盒測试 第4代 測试方法 4GWM 在线測试 持续測试 灰盒 脚本驱动 脚本桩 摘  要: 本文是第4代白盒測试方法的理论介绍,描写叙述3个关键领域内9项关键特征的概念与固有特征.同一时候 ...

  6. Android 自己主动化測试之------ Monkey工具

    尽管 一般公司都有专门的測试人员,可是有时候 免不了 我们既要去开发产品,也要去測试产品,測试产品.有些机械化的 点界面的操作,谷歌已经给我们提供了工具.Monkey, 猴子測试. 什么是Monkey ...

  7. APP压力測试新手教程

    Daniel Knott 用过各种不同编程语言和软件质量保证工具.他在软件开发和測试方面干了七年,自2010年,他一直在德国汉堡的XING AG公司就职,几个项目里,比方XING调查和XING建议,他 ...

  8. 移动測试技术保护源码!解码全球首款移动端白盒測试工具ThreadingTest (文章转自己主动点科技)...

    作者 智晓锋 - 2014/07/14 自从斯诺登曝光美监听丑闻事件之后,我国政府就将信息安全问题上升到了国家安全的高度.基于此.国内的一家创业公司推出了智能型Android真机白盒測试以及开发辅助类 ...

  9. 移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践

    这篇是计算机类的优质预售推荐>>>><移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践> 国内顶级互联网公司測试实战经验总结.阿里.腾讯.京东.携程.百 ...

最新文章

  1. 利用OpenCV实现图像修复(含源码链接)
  2. Android中线程同步之Mutex与Condtion的用法
  3. python学精通要多久-精通python要多久
  4. BZOJ 5267 特工 (类FWT)
  5. Deeplearning.ai深度学习课程笔记-在线版
  6. Asp.net 编码函数
  7. php类中双冒号和-的区别
  8. Java8————Base64
  9. 做了一个RAID 5 10块盘的试验
  10. javascript window.navigator
  11. 【重点 递归版】剑指offer——面试题16:反转链表
  12. Echarts实现双y轴(不同刻度)
  13. 【Windows】替换系统文件
  14. 中国房企加速并购重组
  15. 计算机桌面性能3.3,显卡天梯图2018年3月最新版 三月桌面显卡性能排行 (全文)
  16. MySQL数据库(1):数据库 Database 基本概念
  17. 基于CLIP实现以文精准搜图
  18. 数据库原理 头歌实训 数据库常用对象
  19. M2 MacBookAir售价是多少 M2 MacBookAir配置如何
  20. 《致橡树》–by 舒婷

热门文章

  1. android 自定义checkBox的样式
  2. android点9图architecture
  3. 【mDNS】本地DNS解析协议
  4. Android Studio 如何导入第三方jar包(整理)
  5. 文件权限二(特殊权限、隐藏属性、文件访问控制列表、切换用户方式)
  6. java代码简单操作Redis数据Jedis jar
  7. 20165203 《网络对抗技术》week1 Kali的安装与配置
  8. HttpApplication 事件执行顺序
  9. Nginx+memcached+tomcat配置集群session共享负载均衡
  10. Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.