Android 手机自动化测试工具有哪几种?
作者:SeganW来源:知乎
还有Sikuli (http://sikuli.org),基于优秀的图像对比库opencv的测试工具,测试脚本使用Python编写,非常强大。如果你的app没有源码,可以选择它;或者你想做系统测试(跨app的测试),也可以选择它。其它的还是用下面说的那些个吧。
我通过其核心包sikuli-script.jar实现了android的sikuli化,暂时不打算开源。其实原理挺简单的,认真看过sikuli源码的应该都能写出来。
看lz的意思应该只是想问应用层的,我来说点应用层的
先说说开源的吧:
[*]Robotium
[*]Monkeyrunner
[*]Robolectric
[*]CTS
还有个新兴的测试工具,以前在GitHub看到,现在找不到了,好像是BDD类型的语法;现在还不成熟。
另外基于web的测试也有基于Selenium Webdriver 的 Android WebDriver:
有两种:
[*]基于Remote Server的:官方提供了java接口的,但是Python版的官方里面却没有。我非常喜欢Python,所以自己实现了并且开源到了GitHub:https://github.com/truebit/AndroidWebDriver4Python 有问题大家可以提到上面
[*]基于Instrumentation的:已经在Android SDK r14里面可以安装了
不开源的就多了,不过我见过的一般是以下几种思路:
1. 基于Android Java Instrumentation框架:
[*]基于Robotium,比如bitbar的产品:http://bitbar.com/products
[*]基于Instrumentation,那就海了去了,很多公司自家写的工具都基于这个;另外Robotium就是基于这个的
2. 基于Android lib层的各种命令,比如sendevent,getevent, monkey, service这些,然后用各种语言封装
MonkeyRunner还是很有前景的,Google自己弄的。现在最新的dev版本已经有支持UI的id操作的EasyMonkey了。可以git clone git://http://android.kernel.org/platform/sdk.git看看
作者:Li7tleMK
来源:知乎
1、Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出。实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性。
2、MonkeyRunner也是Android SDK提供的测试工具。严格意义上来说MonkeyRunner其实是一个Api工具包,比Monkey强大,可以编写测试脚本来自定义数据、事件。缺点是脚本用Python来写,对测试人员来说要求较高,有比较大的学习成本。
3、Instrumentation是早期Google提供的Android自动化测试工具类,虽然在那时候JUnit也可以对Android进行测试,但是Instrumentation允许你对应用程序做更为复杂的测试,甚至是框架层面的。通过Instrumentation你可以模拟按键按下、抬起、屏幕点击、滚动等事件。Instrumentation是通过将主程序和测试程序运行在同一个进程来实现这些功能,你可以把Instrumentation看成一个类似Activity或者Service并且不带界面的组件,在程序运行期间监控你的主程序。缺点是对测试人员来说编写代码能力要求较高,需要对Android相关知识有一定了解,还需要配置AndroidManifest.xml文件,不能跨多个App。
4、UiAutomator也是Android提供的自动化测试框架,基本上支持所有的Android事件操作,对比Instrumentation它不需要测试人员了解代码实现细节(可以用UiAutomatorviewer抓去App页面上的控件属性而不看源码)。基于Java,测试代码结构简单、编写容易、学习成本,一次编译,所有设备或模拟器都能运行测试,能跨App(比如:很多App有选择相册、打开相机拍照,这就是跨App测试)。缺点是只支持SDK 16(Android 4.1)及以上,不支持Hybird App、WebApp。
5、Espresso是Google的开源自动化测试框架。相对于Robotium和UIAutomator,它的特点是规模更小、更简洁,API更加精确,编写测试代码简单,容易快速上手。因为是基于Instrumentation的,所以不能跨App。配合Android Studio来编写测试的简单例子
6、Selendroid:也是基于Instrumentation的测试框架,可以测试Native App、Hybird App、Web App,但是网上资料较少,社区活跃度也不大。
7、Robotium也是基于Instrumentation的测试框架,目前国内外用的比较多,资料比较多,社区也比较活跃。缺点是对测试人员来说要有一定的Java基础,了解Android基本组件,不能跨App。
8、Athrun是淘宝出的一个移动测试框架/平台,同时支持iOS和Android。Android部分也是基于Instrumentation,在Android原有的ActivityInstrumentationTestCase2类基础上进行了扩展,提供一整套面向对象的API。这里有详细介绍。
9、Appium是最近比较热门的框架,社区也很活跃。这个框架应该是是功能最强大的,
[*]它的优点:
[*]开源;
[*]支持Native App、Hybird App、Web App;
[*]支持Android、iOS、Firefox OS;
[*]Server也是跨平台的,你可以使用Mac OS X、Windows或者Linux;
它的哲理是:
[*]用Appium自动化测试不需要重新编译App;
[*]支持很多语言来编写测试脚本,Java、Javascript、PHP、Python、C#、Ruby等主流语言;
[*]不需要为了自动化测试来重造轮子,因为扩展了WebDriver。(WebDriver是测试WebApps的一种简单、快速的自动化测试框架,所以有Web自动化测试经验的测试人员可以直接上手);
[*]移动端自动化测试应该是开源的;
它的设计理念:
[*]Client/Server架构,运行的时候Server端会监听Client端发过来的命令,翻译这些命令发送给移动设备或模拟器,然后移动设备或模拟器做出响应的反应。正是因为这种架构,所以Client可以使用Appium client libraries多种语言的测试脚本,而且Server端完全可以部署在服务器上,甚至云服务器。
[*]Session,每个Client连接到Server以后都会有一个Session ID,而且Client发送命令到Server端都需要这个Session ID,因为这个seesion id代表了你所打开的浏览器或者是移动设备的模拟器。所以你甚至可以打开N个Session,同时测试不同的设备或模拟器。
[*]Desired Capabilities,其实就是一个键值对,设置一些测试的相关信息来告诉Server端,我们需要测试iOS、还是Android,或者换是WebApp等信息。
[*]Appium Server是Node.js写的,所以可以直接用NPM来进行安装。
[*]Appium Clients,Mac OS和Win下提供GUI,不需要装Node.js,方便测试人员操作。
相关限制:
[*]如果你在Windows使用Appium,你没法使用预编译专用于OS X的.app文件,因为Appium依赖OS X专用的库来支持iOS测试,所以在Windows平台你不能测试iOS Apps。这意味着你只能通过在Mac上来运行iOS测试。
总结:
[*]在iOS部分是封装了UIAutomation;Android 4.2以上是用UiAutomator,Android 2.3 ~ 4.1用的是 Instrumentation,也就说Appium同时封装了UiAutomator和Instrumentation。所以Appium拥有了以上几大框架的所有优点:跨App,支持Native App、Hybird App、Web App,还支持N种语言来编写你的测试脚本。
移动无线测试技能树
常用IDE
Android
ADT
Android Studio
iOS
Xcode
Common
Atom
Sublime Text
Vim
基础知识
Android
掌握Android开发基础技能
iOS
掌握iOS开发基础技能
web
掌握web开发基础技能
api
掌握api相关基础知识
测试
掌握基本的测试用例设计方法和思想
常见应用模式
Native
Hybrid
H5 App
ReactNative
常用工具
Android
Android sdk manager
adb
ddms
ant
aapt
emulator
Genymotion
hierarchyviewer
monitor
monkey
monkeyrunner
uiautomatorviewer
iOS
lldb
iExplorer
libimobiledevice 套件
codesign
instruments
xcodebuild
atos
xcrun
常用UI Automation框架
Android
Instrumentation
Athrun
Robotium
Monkey
Monkeyrunner
uiautomator
Selendroid
Calabash-Android
monkeytalk
Appium
Espresso
cafe
iOS
UIAutomation
XCUITesting
KIF
Frank
appium
ios-driver
Mechanic.js
monkeytalk
Calabash-iOS
TuneupJs
ynm3k
常用单元测试框架
Android
robolectric
Instrumentation
Mockito
RxJava
iOS
OCUnit
GHUnit
XCTest
OCMock
OCMockito
Expecta
OCHamcrest
常用动态更新
ReactNative
waxpatch/wax
ota
常用性能工具
抓包
Charles
fiddler
burpsuite
tcpdump
anyproxy
弱网模拟
iOS developer mode
ATC
Charles
memory
Android
MAT
ddms
Memory Monitor
Allocation Tracker
LeakCanary
dumpsys
procrank
top
iOS
Memory Leaks
PLeakSniffer
Scan
Android
findbugs
lint
infer
CheckStyle
PMD
iOS
scan-build
oclint
infer
deployment -other
Common
安捷伦
tcpdump
wireshark
高速(慢速)摄像机
埋点
腾讯GT
网易Emmagee
Android
gfxinfo
dumpsys
traceview
systrace
GameBench
battery-historian
iOS
Core Animation(instruments)
Network(instruments)
TimeProfiler(instruments)
Zombies(instruments)
安全
Android
Drozer
apktool
dex2jar
proguard
加固
exported/permission
AndBug
androguard
Xposed
iOS
IDB
iRET
DVIA
LibiMobileDevice
otool
质量体系相关
spark
kafka
ELK
abtest
AB Tester
AppAdhocOptimizer
Google Website Optimizer
Visual Website Optimizer
常用灰度测试工具
testflight
蒲公英
fir
pre
常用云测平台
testin
MQC
MTC
常用持续集成平台/相关工具
Jenkins
Travis CI
Android
mvn
gradle
iOS
xctool
Cocoapods
多语言开发应用
SL4A
gomobile
多设备远程管理平台
STF
软技能
知识管理/总结分享
沟通技巧/团队协作
需求管理/PM
交互设计/可用性/可访问性知识
快速的学习能力
既然说到andoird测试工具的分类,我就以分类的角度来回答吧。
1)纯白盒方式的测试,Monkey。楼上已经有哥们提到了,使用moneky更多的是开发team,而不是纯粹的测试team,毕竟要求对android开发比较了解才用得了monkey。
2)偏白盒的robotium,这家伙号称是黑盒,但是本人不太认同~ 因为使用robotium需要知道package和acitivity这样的细节,即便不是开发人员来做,也得从开发人员那里获得不少开发文档才能做。
3)纯黑盒的方式,这个分类比较有意思,我分得细点
3-1)sikuli,原来只针对桌面应用,后来自然延伸到了android app,让人眼前一亮的测试方式。框个图,写个简单的python测试脚本(其实java脚本也可以),测试就做好了,简单又形象,还有逻辑。因为验证点是依赖于图片比对,所以瓶颈也在此。屏幕大小和分辨率的不同是这种测试的硬伤,如果测试团队觉得每个手机上抠下来的图要重新截,那...也就没啥了。
3-2)testin,deviceanywhere等
楼上那个哥们应该是testin的人,介绍已经很全面了,我只概括一下。这类测试本身没有神马特别的,无非是放在了云端,将规模化的测试做到了极致,与其说是测试工具,不如说是测试平台。说缺点嘛也有,由于只是简单的基于坐标的脚本录制(并没有灵活的功能性验证点),这种测试往往比较简单,只是做做简单的适配性和性能测试,毕竟卖点不在测试类型上。
3-3)clicktest(我们家的工具,算是广告吧,呵呵)
论原理,也是基于图片对比技术,只是做了些优化,比对的智能一些,跨手机的效果更好罢了。也支持录制回放,自定义了一些测试命令,易上手,可读性强,不再需要使用者(手工测试人员)编程了。另外,支持工作流式的逻辑集成,可以灵活得组合测试步骤,增强复用性。clicktest是工具,不是平台,欢迎各位咨询和探讨。
对了,还有一种
4)硬件辅助的测试方式,我就不举例了
先说原理,硬件辅助视频输出(摄像头or视频线),控制方式是软硬件结合。这种方式的特点,跨平台杠杠的,但是成本高,包括硬件成本以及硬件工程师的成本。
希望和各位同行多交流:) 补充几个:
sikuli,是MIT的几个高材生搞的一套图形化编程系统,可以用来测试任何图形界面,配合工具screencast,即可方便的利用Sikuli来测试真实手机,语言用python语法,都是可视化的脚本。
Monkey,用于app的稳定性测试。业界通用的哦,不会用的话不要说你是做android开发的。
ASE,android script environment,是API的脚本实现,稳定性一般,环境配置稍复杂,不过,编写成本低,如果再结合shell等,可以指定很强大的自动化思路。
WindRiver公司也出了一些商用的自动化框架,没用过,据他们的官网介绍,很是不错的。
总结一下:
如果想做一套大型的、可扩展的自动化框架(工具),基于Robotium是最靠谱的,虽然难度有点高。
介绍下我们的两个核心工具:研发阶段的静态代码分析工具Coverity,黑盒模糊测试工具Defensics,下为详细介绍。
Coverity技术源自于斯坦福大学,是最新一代的源代码静态分析工具,能够快速检测并定位源代码中可能导致产品崩溃、未知行为、安全缺口或者灾难性故障的软件缺陷。具有缺陷分析种类多、分析精度高和误报率低的特点,是业界误报率最低的源代码分析工具(小于10%),大家一定要注意误报率!误报率高于30%的产品研发是不会用的,因为研发现在太贵了,这也是BAT,华为三星阿里巴巴等大中小型选用Coverity 的最大原因。介绍几个功能:
代码质量缺陷与安全漏洞检测:
Coverity 的智能静态分析引擎能够帮助开发者在工作流程中找出质量缺陷和安全漏洞,提供精确、可行的修复指导,在开发过程中识别关键质量缺陷,降低风险并减少项目成本。通过深刻理解行为和问题危急程度, Coverity SAVE 可以智能测试,精确找出那些潜在的难以发现的能够引发崩溃的问题,包括C/C++, Java (JSP)和 C #(ASP) ,Objective-C, Android,Javascript, Python, PHP代码库。
能够检测出的质量缺陷类型示例(更详细的请查看http://www.coverity.com/products/code-advisor/#CWEcoverage,不仅包括CWE Top 25与OWASP Top 10,Coverity是最全的,也是最准确的):)。
API usage errors
Best practice coding errors
Build system issues
Buffer overflows
Class hierarchy inconsistencies
Code maintainability issues
Concurrent data access violations
Control flow issues
Cross-site scripting (XSS)
Cross-site request forgery (CSRF)
Deadlocks
Error handling issues
Hard-coded credentials
Incorrect expression
Insecure data handling
Integer handling issues
Integer overflows
Memory – corruptions
Memory – illegal accesses
Null pointer dereferences
Path manipulation
Performance inefficiencies
Program hangs
Race conditions
Resource leaks
Rule violations
Security best practices violations
Security misconfigurations
SQL Injection
Uninitialized members
代码安全与Web 应用安全审计:
Coverity 的安全审计引擎能够通过识别JSP和ASP网站中可能导致安全漏洞的关键缺陷,降低风险和项目成本。Coverity Static Analysis Verification Engine 能够智能检测出ASP应用和Java web应用中的缺陷,包括缓存区溢出、整数溢出、格式字符串错误、SQL注入、系统命令行注入、资源泄露、目录遍历和跨站脚本攻击 (XSS)等问题,全面覆盖OWASP Top10。
以往的安全工具在开发中失败的主要原因是高误报率或结果不正确。Coverity设计的新引擎,能够解决现代应用的复杂问题,并获得更为精准的结果。
适用于web应用安全的Coverity SAVE 分析创新包括:
•企业框架分析器: 深刻理解现代web 应用,增加源代码分析包括依赖性注入,进入点以及MVC范例
•白盒模糊测试 自动验证日常数据清理惯例,对不可信数据进行充分清理,确保使用环境正确
Coverity是第一个能够快速、准确分析当今的大规模(百万行、千万行甚至上亿行)、高复杂度代码的工具,目前已经检测了超过380亿行专有代码和开源代码。全球有超过1100个像华为,中兴,联想,百度,三星,腾讯,Apple,Honeywell, NEC, BAE Systems, Juniper Networks, BMC Software, Samsung, France Telecom, Sega, 和 Schneider Electric这样的品牌和企业依靠Coverity确保其产品和服务的质量与安全。
Defensics:
Defensics-心脏出血漏洞的发现者。能够模拟各种网络协议数据包进行黑盒模糊测试-Fuzzing,找到质量性问题(如Ddos)和安全性问题(密码泄漏,你懂的)。
Defensics协议健壮性和安全性Fuzzing测试产品是HeartBleed(心脏出血漏洞)发现者,从OUSPG(Oulu University Secure Programming Group,Oulu 大学安全规划组) 的PROTOS 测试工具项目衍生而来。一直以来,Defensics 不断将最新的研究成果加入到其测试技术当中,保持着高度的创新性。当传统的测试对日新月异的网络技术发展感到无所适从时,Defensics却能够轻松面对-这种适应性源自Synopsys 独特的Fuzzing 技术。Fuzzers 的重点不是已知的漏洞,而是针对新的安全性问题。Defensics 产品能够预先发现未知的0-day 漏洞。
DEFENSICS™介绍
DEFENSICS™健全性和安全性测试平台基于协议的健全性和安全性测试,面向IP,车载系统, Wireless 和多媒体数据等近300种协议,旨在消灭软件安全漏洞,帮助客户发掘、管理和削弱未知漏洞威胁。针对特定的协议和文件格式的自动生成模糊测试用例,用于检测被测系统处理相关协议和文件格式的健壮性。
DEFENSICS™ 工具模拟引擎是业界第一款基于状态的Fuzz 测试用例生成器。它利用深度协议模型来智能的、精确的命中目标协议中易受攻击影响的部分,自动的生成具有广泛覆盖的Fuzz 测试用例.
Defensics的优势包括但不限于:
► 基于软件的设计
► 不限安装数量,方便远程分发
► 支持并发测试
► 性能随硬件增长
► 基于自动化的测试
通过使用Defensics,可以帮助用户:
►保护软件和系统的完整性
►最大限度减少安全漏洞和数据损失的威胁
►在减少总体成本的同时改善服务质量–减少系统上线后的问题
►提高系统正常运行时间/减少故障时间的风险
►保护品牌声誉
我们已经尝试使用WiFi 协议Fuzzing 把某杂粮手机给玩坏了.
好吧,我在原厂负责技术与销售,大家有需求的话,欢迎随时联系。 感谢楼主分享:P 好东西。。 信息量很大啊 {:4_88:}
页:
[1]