zoukankan      html  css  js  c++  java
  • 【压测】【手机】自动化工具

    作者:来者
    链接:https://www.zhihu.com/question/19716849/answer/899200480
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    不同的App测试工具可以完成不同的测试类型,但是市面上测试工具种类非常多:有免费的、付费的;测试原生应用的、测试混合应用的;安卓平台的、iOS平台的。测试人员只有App测试工具有一定了解,才能再项目中结合测试目标选择合适的工具。本书按照平台划分介绍以下测试工具和测试框架:

    安卓自动化工具

    A. Monkey

    Monkey可以生成伪随机用户事件流例如模拟用户触摸屏幕、滑动、按键等操作手势,以及一些系统级的事件,对设备上的程序进行压力测试,检测程序多久的时间会发生异常。

    其实Monkey就是客户端性能测试工具,测试客户端应用的稳定性,健壮性。Monkey 无需额外安装,在Android SDK的platform-tools目录下。 在进行SDK环境配置时可以把该路径配置到系统变量的path中,便可以直接通过命令进行使用。

    • 优点:执行过程简单,速度快,能发现一些非常规路径和较深层次的问题。
    • 缺点:执行过程不可控,不支持诸如录制、回放,截屏等功能。

    B. Monkeyrunner

    Monkeyrunner同样是Android SDK 自带的测试工具, Monkeyrunner可以说是“monkey之子”,但是它们的作用完全不同,Monkeyrunner主要依靠Monkey Runner API,Monkey Device API,Monkey Image API三个类来工作。测试人员可以通过Monkeyrunner的API来控制Android设备或者模拟器。如编写python脚本去安装Android 应用,运行应用,发送模拟按键,手势,截图等等。

    • 优点:功能较为丰富
    • 缺点:Monkeyrunner录制的脚本是以坐标轴来作为定位方式,而安卓设备类型众多,各种分辨率,所以移植性不好。

    C. Instrumentation

    Instrumentaion是Android自带的测试框架,它是很多其它测试框架的基础,很多开发人员基于instrumentation进行顶层封装延展出新的测试框架。Instrumentation可以在主程序启动之前,创建模拟的Context;发送UI事件给应用程序;检查程序当前运行的状态;控制Android如何加载应用程序,控制应用程序和控件的生命周期;可直接调用控件的方法,对控件的属性进行查看和修改。Instrumentation做UI自动化测试受制于Android的安全策略,需要和被测移动应用在相同签名下,相同的进程下,才能互相信任,获取控件状态。另外,Instrumentaion比较底层,封装程度不高,因此不适合直接拿来测试。从Android API level 16开始,Android引入了新的测试框架,它对UI测试做了高度封装,同时不依赖于instrumentation,不需要做签名校验,可直接通过系统调用,获取被测应用控件。

    • 优点:该框架基于JUnit,因此既可以直接使用Junit 进行测试,Instrumentation对安卓操作系统的版本没有要求。
    • 缺点:不支持跨应用,基于Instrumentation二次封装开发的测试框架都继承了这个缺点。

    D. Robotium

    Robotium是基于Instrumentation框架开发的测试框架. 主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。由于对常用的操作进行了易用性的封装. 用于开发功能性、系统和验收测试场景。它运行时绑定到GUI组件。它安装了一个测试用例套件作为在Android设备或仿真器上的应用程序,并提供用于执行测试的真实环境。它支持所有的Android 版本,Robotium 只支持Java语言开发并只支持Android,并不支持跨进程。在最新版本中官方出了收费录制插件 Robotium Recorder。

    • 优点:支持纯Android原生应用和混合应用。开发测试脚本速度快,易用性高。该框架可以自动处理多个Android的Activity。由于运行时绑定到GUI组件,不访问代码或不了解app实现也可以工作,所以测试用例具有更好的鲁棒性(健壮)。支持Activities、Dialogs、Toasts、Menus、Context Menus和其他Android SDK控件。
    • 缺点:不能处理flash和web组件。在旧设备上会变得很慢。由于不支持iOS设备,当自动化测试同时覆盖Android与iOS的情况时,测试会被中断。没有内置的记录和回放功能.,使用记录功能需要 TestDroid 和 Robotium Recorder 这样的收费工具。

    E. UiAutomator

    是谷歌参考iOS 的UIAutomation,在Android4.1版本发布时推出用Java开发的UI测试框架。它只能用于UI黑盒方面的测试。由于只能运行在4.1以后的版本中,所以不支持Webview。其最大的特点是可以跨进程操作,使用框架提供的API可以对安卓移动应用进行一系列的自动化测试操作,如点击、滑动、键盘输入、长按以及常用的断言方法等。既可以通过以控件的方式来定位,也支持坐标轴的方式来定位。

    • 优点:它在运行访问不同的进程时,会给JUnit测试用例特权。库由谷歌社区支持和维护。
    • 缺点:仅支持android4.1(API level 16)及以上,不支持脚本录制,不支持Webview。由于它只能使用Java语言,因此很难和使用Ruby的cucumber混合。如想支持BDD框架,建议使用Java自己的BDD框架,例如Jbehave。

    F. Espresso

    Espresso是Google官方提供的Android UI自动化测试框架。相对于Robotium和,它的特点是编写测试代码简单、容易快速上手。由于基于Instrumentation,所以不能跨进程。它提供了一系列API用于构建测试App UI的用户操作。Espresso非常适合用来编写白盒测试,其中测试代码的编写是利用了被测试App中程序代码实现细节。Google使用Espresso测试了自家应用程序超过30个,包括G+、Maps和Drive。

    • 优点:Espresso框架测试App不会通过阻塞主线程去同步UI测试。也就是它能自动同步模拟行为对UI的测试,它能够检测到主线程空闲状态的时候,以便在适当的时候运行测试代码或命令,这样就没必要通过sleep去让主线程睡眠的方式去同步测试。
    • 缺点:只能在被测试app的Context中操作

    G. Calabash

    Calabash-android是一款开源的,跨平台的,同时支持iOS,Android原生应用和混合应用,同时支持模拟器和真机测试的自动化测试框架,它可用测试屏幕截图、手势和实际功能代码。它使用Cucumber作为测试核心,Cucumber是在敏捷团队十分流行的自动化的功能测试工具,它使用接近于自然语言的特性文档进行用例的书写和测试,支持多语言和多平台。Cucumber可以用自然的英语语言表述App行为,实现BDD(Behavior Driven Development,行为驱动开发)。Cucumber语句用Ruby定义。

    • 优点:列表项简单,类似英语表述的测试语句支持在屏幕上的所有动作,如滑动,缩放,旋转,敲击等。跨平台开发支持(同样的代码在Android和iOS设备中都适用)。
    • 缺点:测试脚本无法断点调试,另外测试步骤失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题。测试耗费时间,因为它总是默认先安装App。因为Calabash框架必须安装在iOS的ipa文件中, 因此测试人员必须要有iOS的App源码。除了Ruby,对其他语言不友好。

    H. Appium

    Appium是一款开源的、跨平台的自动化测试工具,支持iOS、Android和FirefoxOS平台。通过Appium开发者无需重新编译App或者做任何调整,就可以测试移动应用,可以使用测试代码访问后端API和数据库。它是通过驱动苹果的UIAutomation和Android的框架来实现的双平台支持,同时绑定了Selenium WebDriver用于老的Android平台测试。开发者可以使用WebDriver兼容的任何语言编写测试脚本,如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl语言。Appium的核心是一个REST API网络服务器。这个服务器接收客户端过来的连接,监听客户端过来的命令,在移动设备上运行命令,然后把代表命令运行结果的HTTP响应包发送回客户端。

    • 优点:Appium在不同平台中使用了标准的自动化API,所以在跨平台时,不需要重新编译或者修改代码。 Appium支持Selenium WebDriver支持的所有语言,如java、Object-C等,还可以使用Selenium WebDriver的Api。
    • 缺点:针对Android测试必须要用SDK4.0以上版本;由于服务端运行在电脑上,该工具必须连接电脑才可以运行,只能用于UI的自动化测试,在很多情况下的测试验证只能通过验证界面来进行

    I. Robolectric

    Robolectric是一款并不依赖于Android提供的测试功能,允许单元测试直接运行于JVM之上的单元测试框架,它通过实现一套JVM能运行的Android代码,然后在unit test运行的时候去截取android相关的代码调用,然后转到Robolectric实现的代码去执行这个调用的过程。因此它不像模拟器或设备需要dexing(Android dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式)、打包、部署和运行的过程,大大减少了测试执行的时间。除了实现Android里面的类的现有接口,Robolectric还给每个Shadow类额外增加了很多接口,可以读取对应的Android类的一些状态。比如它为ImageView提供了getImageResourceId()方法,测试者可以通过getImageResourceId()接口来确定是不是正确显示了期望的Image。

    • 优点:Robolectric可以处理控件展示、资源加载和很多使用Native C实现的真机上的其他功能。Robolectric可以模拟真机上的大部分操作。Robolectric允许在项目工程中或持续集成(CI如hudson、jenkins)中使用JVM来执行测试用例,所以就省掉了打包、安装的过程,将测试用例的执行时间由分钟级降到秒级。
    • 缺点:Robolectric对Android底层的模拟实现还未完全

    J. RoboSpock

    RoboSpock是一款开源的Android测试框架,它提供简单编写BDD行为驱动开发规范的方法,使用Groovy语言,支持Google Guice库。RoboSpock合并了Robolectic和Spock的功能。

    • 优点:可以在JVM上快速执行测试;能模拟对象并测试交互,指定Android SDK类的行为
    • 缺点:Groovy就是Java, 目前只有JVM的实现,只能跑在有JVM的机子上。
  • 相关阅读:
    Git 使用规范流程
    关于Python的super用法研究
    python中try except处理程序异常的三种常用方法
    break 和 continue 语句, 以及循环中的 else 子句
    杂记(python)
    Request和Response
    MVC项目开发步骤
    Web中单元测试步骤
    JSP中的细节
    WEB中地址的写法
  • 原文地址:https://www.cnblogs.com/zhuzhubaoya/p/13379163.html
Copyright © 2011-2022 走看看