




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ANDROID APP测试工具调研工具一android SDK里自带的测试工具之一monkey。1.什么是monkeyMonkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流,主要应用在压力和可靠性测试上,运行该命令可以随机地向目标程序发送各种模拟键盘事件流,并且可以自己定义发送的次数,以此观察被测应用程序的稳定性和可靠性。2Monkey的特征(1)、 测试的对象仅为应用程序包,有一定的局限性。(2)、 Monkey测试使用的事件流数据流是随机的,不能进行自定义。(3)、 可对Monkey 测试的对象,事件数量,类型,频率等进行设置。3. Monkey的基本用法启动指定的应用程序,并向其发送500个伪随机事件$ adb shell monkey -p -v 500命令选项参考:下表中列出了Monkey命令行可用的全部选项。类别 选项 说明 常规 -help 列出简单的用法。 -v 命令行的每一个 -v 将增加反馈信息的级别。 Level 0( 缺省值 ) 除启动提示、测试完成和最终结果之外,提供较少信息。 Level 1 提供较为详细的测试信息,如逐个发送到 Activity 的事件。 Level 2 提供更加详细的设置信息,如测试中被选中的或未被选中的 Activity 。 事件 -s 伪随机数生成器的 seed 值。如果用相同的 seed 值再次运行 Monkey ,它将生成相同的事件序列。 -throttle 在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。如果不指定该选项, Monkey 将不会被延迟,事件将尽可能快地被产成。-pct-touch 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。-pct-motion 调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。-pct-trackball 调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。-pct-nav 调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。-pct-majornav 调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)-pct-syskeys 调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。-pct-appswitch 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。-pct-anyevent 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。约束限制-p 如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。-c 如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选择下列类别中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 项只能用于一个类别。调试-dbg-no-events设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。-hprof设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(5Mb),所以要小心使用它。-ignore-crashes通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。-ignore-timeouts通常,当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。-ignore-security-exceptions通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。-kill-process-after-error通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。-monitor-native-crashes监视并报告Android系统中本地代码的崩溃事件。如果设置了-kill-process-after-error,系统将停止运行。-wait-dbg停止执行中的Monkey,直到有调试器和它相连接。4. Monkey测试的一个实例在命令行中输入:adb devices查看设备连接情况在有设备连接的前提下,在命令行中输入:adb shell 进入shell界面以com.tencent.mtt作为对象进行MonkeyTest(其中-p表示对象包 v 表示反馈信息级别)下面开始发送随机事件应该是日志以及测试完成结果分析Monkey主要是随机地向目标程序发送各种模拟键盘事件流,因为主要是一系列的屏幕点击时间,可以呈现目标程序在经过随机点击事件目标程序的稳定性,在经过反复的monkey测试下的,目标程序没有发现异常情况,我们应该可以认为目标测试程序是相对稳定的。个人认为monkey主要是向目标程序发送各种模拟键盘事件流,并不能实现认为想要实现的一些事件,所以可以说monkey应该达不到自动化测试工具的标准。5.关于Monkey测试的停止条件Monkey Test执行过程中在下列三种情况下会自动停止:(1)、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。(2)、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。(3)、如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。通过多次并且不同设定下的Monkey测试才算它是一个稳定性足够的程序。 工具二android SDK里自带的测试工具之二monkeyruuner1.是monkeyrunnermonkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,当然也可以将其用于其它目的。2. monkeyrunner工具同Monkey工具的差别Monkey:Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。monkeyrunner:monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。3. monkeyrunner的测试类型(1)、多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。(2)、 功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。(2)、 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。(4)、 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用Android Debug Bridge这样的Android工具。device.shell(input text goup01)按下HOME键 device.press(KEYCODE_HOME,DOWN_AND_UP)按下BACK键 device.press(KEYCODE_BACK,DOWN_AND_UP)按下下导航键 device.press(KEYCODE_DPAD_DOWN,DOWN_AND_UP)按下上导航键 device.press(KEYCODE_DPAD_UP,DOWN_AND_UP)按下OK键 device.press(KEYCODE_DPAD_CENTER,DOWN_AND_UP) 相应的按键对应的名称如下:home键:KEYCODE_HOMEback键:KEYCODE_BACKsend键:KEYCODE_CALLend键:KEYCODE_ENDCALL上导航键:KEYCODE_DPAD_UP下导航键:KEYCODE_DPAD_DOWN左导航:KEYCODE_DPAD_LEFT右导航键:KEYCODE_DPAD_RIGHTok键:KEYCODE_DPAD_CENTER上音量键:KEYCODE_VOLUME_UP下音量键:KEYCODE_VOLUME_DOWNpower键:KEYCODE_POWERcamera键:KEYCODE_CAMERAmenu键:KEYCODE_MENU4. 运行monkeyrunner进入shell命令交互模式后,首要一件事就是导入monkeyrunner所要使用的模块。直接在shell命令下输入:from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice 回车。 截止到这步完成,我们就可以利用monkeyrunner进行测试工作了。这里有两种方案,一是直接在shell命令下输入以下命令,另一种是将以下命令写到python文件里(要懂点python脚本)。命令说明: 这里摘录部分关键命令 详情请参考上述网站或下面的官方网站 /reference/android/view/KeyEvent.htmldevice=MonkeyRunner.waitForConnection() #连接手机设备#安装apk包到手机设备(apk文件我放在tools文件夹下)。device.installPackage(./dome.apk) 安装成功返回true安装失败返回false(大多数是安装路径有问题)#启动其中的任意activity了,只要传入package和activity名称即可。device.startActivity(component=com.dome/com.dome.MainActivity) #打开这个应用程序的某个Activity。成功(没有报错)device.reboot() #手机设备重启# 截取屏幕截图 (尝试没有成功)result = device.takeSnapShot# 将截图保存至文件(尝试没有成功) result.writeToFile(./shot1.png,png)更多命令详见/guide/developing/tools/monkeyrunner_concepts.htmlpython脚本 就是把系列指令写在x.py 文件里,运行cmd 执行如: monkeyrunner D:test.py 指令,D: 是存放 x.py文件的路径。测试结果分析MonkeyRunner提供的操作有限,适合重复性、短路径的测试,不适合连续性的操作,由于type和drag方法的不稳定,很容易偏离我们的预期。MonkeyRunner操作依赖于控件坐标(也可以通过id,比较耗时),一旦UI发生改变,脚本无法使用。Monkeyrunner的等待机制MonkeyRunner.sleep,无法更加友好地等待;MonkeyRunner不提供结果,我们只能通过截图比较,无法摆脱人工干预。5.monkeyrunner的缺陷:不支持中文字符的输入(只能输入ASC码中存在的字符)基于UI操作,一旦遇到复杂的应用,测试代码的复杂度指数增长;测试设备性能不同,需要根据设备的快慢对操作加时延;脚本的运行速度慢无法将测试结果抓取出来,只能采用截图比较。无法准确统计测试数据。drag方法只能实现简单的滑动屏幕的操作,不能进行复杂的拖拽。微博客户端的下拉刷新操作无法模拟出来。工具三Monkeytalk官网/monkeytalk/MonkeyTalkMonkeyTalk1、MonkeyTalk如何工作主要分为3步:1、 安装MonkeyTalk IDE将MonkeyTalkIDEProfessional文件夹copy到你自己选好的目录下。2、在测试应用中植入agent,并安装应用3、连接测试机,在MonkeyTalk中运行scripts脚本MonkeyTalk IDE - desktop app for record/playback/creation of test scriptsMonkeyTalk Agent - library that must be added to app to enable testingMonkeyTalk scripts - beautiful, understandable, maintainable test scripts2、MonkeyTalK即可以运行在真机,也可以运行在模拟器3、测试的真机和模拟器不需要root、jailbreak 4、MonkeyTalK是免费的、开源的5、MonkeyTalK是跨平台的,android上面录制的脚本可以在IOS上面测试同样的应用,反之亦然6、MonkeyTalK只能对有源代码应用进行测试,而且当agent植入应用后,该应用后续的研发就可以不需要再次植入7、MonkeyTalK可以对HTML5 web apps进行测试8、MonkeyTalK目前仅支持IOS devices和android,以及使用普通UI的游戏应用9、MonkeyTalK支持IOS4.0,及以后版本10、MonkeyTalK连接IOS真机时,必须使用WiFi工具四Appium中文文档网址/content/auto_intro/auto_intro_history.htmlhttp:/appium.io/slate/cn/1.4/http:/appium.io/slate/cn/v1.1.0/?ruby#toc_0技术介绍/shuoit/20140704/340994.htmlAppium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellars对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。使用Appium进行自动化测试有两个好处:1. Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。2. Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。3.appium的基本概念Client/Server Architectureappium的核心其实是一个暴露了一系列REST API的server。这个server的功能其实很简单:监听一个端口,然后接收由client发送来的command。翻译这些command,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command后把执行结果返回给appium server,appium server再把执行结果返回给client。在这里client其实就是发起command的设备,一般来说就是我们代码执行的机器,执行appium测试代码的机器。狭义点理解,可以把client理解成是代码,这些代码可以是java/ruby/python/js的,只要它实现了webdriver标准协议就可以。这样的设计思想带来了一些好处:1,可以带来多语言的支持;2,可以把server放在任意机器上,哪怕是云服务器都可以;(是的,appium和webdriver天生适合云测试)Sessionsession就是一个会话,在webdriver/appium,你的所有工作永远都是在session start后才可以进行的。一般来说,通过POST /session这个URL,然后传入Desired Capabilities就可以开启session了。开启session后,会返回一个全局唯一的session id,以后几乎所有的请求都必须带上这个session id,因为这个seesion id代表了你所打开的浏览器或者是移动设备的模拟器。进一步思考一下,由于session id是全局唯一,那么在同一台机器上启动多个session就变成了可能,这也就是selenium gird所依赖的具体理论根据。Desired CapabilitiesDesired Capabilities携带了一些配置信息。从本质上讲,这个东东是key-value形式的对象。你可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。实际上Desired Capabilities在传输时就是json对象。Desired Capabilities最重要的作用是告诉server本次测试的上下文。这次是要进行浏览器测试还是移动端测试?如果是移动端测试的话是测试android还是ios,如果测试android的话那么我们要测试哪个app? server的这些疑问Desired Capabilities都必须给予解答,否则server不买账,自然就无法完成移动app或者是浏览器的启动。具体操作1.下载Appium for windows,0.12.3版本/appium/appium.app/downloads/解压后的文件双击Appium.exe启动Appium界面点击Launch开启服务创建一个Maven项目,添加一个文件夹apps用来存放被测的app,这里测试的是ContactManager.apkpom.xml添加如下依赖 org.seleniumhq.selenium selenium-java LATEST test 运行Test,注意AVD里的Android如果没有解锁需要先解锁等待启动adb.exe失败情况失败原因配置SDK环境变量的时候命名是SDK_HOME,改成“ANDROID_HOME”。报错信息org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Requested a new session but one was in progress) (WARNING: The server did not provide any stacktrace information)成功情况虚拟机情况结果分析Appium通过各种脚本语言编写测试用例,实现了软件的自动化测试,可以根据不同的测试用例对软件进行自动化测试,解放了人工测试需要进行反复操作的测试行为,因为appium主要是基于server的,所以非常适合市面非常流行的云测试,工具五SilkMobileSilkMobile的特点SilkMobile采用轻量级框架,自动化执行引擎特色明显,自动化测试脚本或代码易于管理,其特点如下所述:1)支持多种移动智能操作系统,如Android、iOS、Blackberry、WindowsMobile、Symbian、Windows Phone等;2)支持PUBLIC CLOUD、NATIVE、IMAGE/TEXT BASED以及Web的控件识别;3)支持与多种主流语言的移植,如Java, Python, C#, Perl等;4)支持与多种主流框架集成,如Silk4Net,Silk4J,TestComplete,Junit3和4;5)同一脚本能满足不同系统平台或同一平台不同版本之间的测试执行;SilkMobile的创新技术SilkMobile在测试框架、对象识别、支持平台、脚本复用度等技术指标方面都有自己独特的创新点技术指标现状点创新点测试框架大部分测试框架与手机平台及语言密不可分,用例开发、管理和维护效率比较低SilkMobile实现了轻量化的测试框架,突出了执行引擎的优势,易于与Java, Python, C#, Perl等主流语言移植,易于与Silk4Net,Silk4J,TestComplete,Junit3和4等主流框架集成对象识别大部分测试工具对象识别方式相对单一SilkMobile支持PUBLIC CLOUD、NATIVE、IMAGE/TEXT BASED以及Web的控件识别支持平台智能手机操作系统平台众多,必须实现自动化才能提高测试效率SilkMobil支持多种操作系统平台,如Android、iOS、Blackberry、WindowsMobile、Symbian、Windows Phone等脚本复用度平台及其界面的差异导致自动化脚本无法复用SilkMobile支持多种方式的控件识别,同一脚本能满足不同系统平台或同一平台不同版本之间的测试执行工具六 RobotiumRobotium是一个测试框架,能够方便你为Android应用程序编写强大、健壮的自动化黑盒测试用例。利用Robotium的支持,用例开发人员能够编写功能、系统和验收测试方案,跨越多个 Android activities。Robotium支持Activities、Dialogs、Toasts、Menus和Context Menus。Robotium自动化测试方法能够模仿普通用户行为,可以试着把一些原来由测试工程师做的测试变成Robotium自动化实现。参考文档:/Robotium 提供下列好处1.以最小的应用程序知识,开发功能强大的测试案例。2.框架支持多个activities 自动活动。3.最短的时间需求写出测试用例。4.测试案例的可读性比标准的仪器测试大大提高。5.通过运行时绑定GUI组件使测试用例更强大。6.执行测试用例速度快。7.顺利整合了Maven或Ant来运行测试,持续集成的一部分。情况一,有源代码编写Robotium测试程序1)导包/导入需要测试的工程 /robotium提供的测试用类/测试工程要继承用来测试activity的父类2)泛型写需要测试的工程的入口activity名NotesList。3)修改构造方法4) 在测试方法前覆写父类的setUp()方法:该方法用来初始化solo,绑定对应的Activity。5)在测试方法后覆写父类的tearDown()方法:该方法用来清理资源垃圾,关闭activity。6)具体操作事件7)Solo类运用Solo类中提供了自动点击、取得、拖拽、搜索等各种方法。声明Solo类型的成员变量private Solo solo;典型方法: 点击:clickOnButton(int)Clicks on aButtonwith a given index.clickOnButton(String)Clicks on aButtonwith a given text.clickOnCheckBox(int)Clicks on aCheckBoxwith a given index.clickOnView(View)Clicks on a given View.clickOnText(String)Clicks on aViewdisplaying a given text.clickLongOnText(String)Long clicks on a givenView.clickOnRadioButton(int)Clicks on aRadioButtonwith a given index.clickOnScreen(float, float)Clicks on a given coordinate on the screen. 取得:getCurrentActivity()Returns the current Activity.getText(String)Returns a TextView which shows a given text.getView(int)Returns a View with a given id.getEditText(String)Returns an EditText which shows a given text. getImage(int)Returns
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 垃圾焚烧发电项目建设与技术方案
- 混凝土泵送施工工艺方案
- 豪华游轮服务员聘用合同及海上服务规范
- 时尚理发店员工招聘与劳务派遣服务协议
- 高端酒店企业股权转让及品牌管理服务合同
- 基于海绵城市理念的老旧小区排水改造策略
- 2025年新能源汽车电池热管理系统在电动汽车安全性能中的重要性报告
- 2025年地热能发电行业市场潜力分析与投资策略报告
- 4.3 坐标平面内图形的轴对称和平移说课稿-2025-2026学年初中数学浙教版2024八年级上册-浙教版2024
- 机械学基础考试题及答案
- 2025年广工建筑电气试卷及答案
- 2025年人社局编外考试题库及答案
- 木制品厂安全生产培训课件
- 排污许可证管理条例课件
- 乡镇人大主席“干在实处、走在前列”学习讨论发言材料
- 电工四级考试理论题库及答案
- 世纪英才教程课件
- 2025年食品安全管理员考试题库及参考答案
- 小学科学新教科版三年级上册全册教案(2025秋新版)
- 婴幼儿发展引导员技能竞赛考试题库(含答案)
- 小学生航空航天知识题库及答案
评论
0/150
提交评论