Android 手机app自动化测试工具具有哪几种

君,已阅读到文档的结尾了呢~~
Android手机MTBF自动化测试工具分析与设计,android自动化测试,android自动化,android 单元测试,android app测试,android压力测试,android 测试,android测试工具,android兼容性测试,android monkey测试,android 真机测试
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Android手机MTBF自动化测试工具分析与设计
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Android自动化测试之MonkeyRunner工具
Android自动化测试之MonkeyRunner工具
一、什么是monkeyrunner
monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
二、monkeyrunner工具同Monkey工具的差别
Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。
monkeyrunner:
monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。
三、monkeyrunner的测试类型
1、多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器,依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
2、功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
3、回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
4、可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的 os和subprocess模块来调用 Debug Bridge这样的Android工具。
四、运行monkeyrunner
您可以直接使用一个代码文件运行monkeyrunner,或者在交互式对话中输入monkeyrunner语句。不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。如果您提供一个文件名作为运行参数,则monkeyrunner将视文件内容为Python程序,并加以运行;否则,它将提供一个交互对话环境。
monkeyrunner的命令语法为:
monkeyrunner -plugin &plugin_jar& &program_filename& &program_options&
[以上的内容部分摘自互联网,借鉴前人的总结]
我这里就以sample中的ApiDemos为例,我们学习任何一样东西似乎都可以有自带的Sample开始,可以在开发环境中先将其生成ApiDemos.apk。
前提:已有device连接(这里可以是真实设备,或者模拟器)
1、 将ApiDemos.apk放在$Android_Root\tools下。
2、 在$Android_Root\tools下新建一个monkeyrunnerprogram.py文件,按照官方的帮助文档,该文件里面内容为:
&1 # Imports the monkeyrunner modules used by this program
&3 &from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
&5 &# Connects to the current device, returning a MonkeyDevice object
&7 device = MonkeyRunner.waitForConnection()
&9 &# Installs the Android package. Notice that this method returns a boolean, so you can test
11 &# to see if the installation worked.
13 device.installPackage('./ApiDemos.apk')
16 &# Runs the component
18 device.startActivity(component='com.example.android.apis/.ApiDemos')
21 &# Presses the Menu button
23 device.press('KEYCODE_MENU','DOWN_AND_UP')
26 &# Takes a screenshot
28 result = device.takeSnapshot()
31 &# Writes the screenshot to a file
33 result.writeToFile('./shot1.png','png')
3、 打开命令行转到Android_Root\tools目录下运行一下命令:
monkeyrunner monkeyrunnerprogram.py
:35:19.711:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.
:35:20.711:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.
:35:21.711:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: wake.
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] Error starting command: monkey --port 12345
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]com.android.ddmlib.ShellCommandUnresponsiveException
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:408)
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at com.android.ddmlib.Device.executeShellCommand(Device.java:276)
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at com.android.monkeyrunner.adb.AdbMonkeyDevice$1.run(AdbMonkeyDevice.java:89)
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at java.util.concurrent.Executors$RunnableAdapter.call(UnknownSource)
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at java.util.concurrent.FutureTask.run(Unknown Source)
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at java.util.concurrent.ThreadPoolExecutor$Worker.run(UnknownSource)
:35:22.835:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice] &at java.lang.Thread.run(UnknownSource)
:35:55.632:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: press KEYCODE_MENU.
:35:58.311:I [main] [com.android.monkeyrunner.MonkeyManager] Monkey Command: quit.
4、 可以Android_Root\tools下查看生成的shot1.png的截图。
六、实例改进
因为ApiDemos首页上按下MENU键没有菜单出现,为了更加形象化,在上一个实验的基础上继续试验一下:
1、 在$Android_Root\tools下新建一个monkeyrunnerprogram1.py文件,里面内容为:
&1 # Imports the monkeyrunner modules used by this program
&3 &from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
&5 # Connects to the current device, returning a MonkeyDevice object
&7 device = MonkeyRunner.waitForConnection()
&9 # Takes a screenshot
11 result = device.takeSnapshot()
13 # Writes the screenshot to a file
15 result.writeToFile('./shotbegin.png','png')
17 # Presses the Down button
18 #这里是我们加入的主要内容
19 device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
21 device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
23 device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
25 device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
27 device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
29 # Takes a screenshot
31 result = device.takeSnapshot()
33 # Writes the screenshot to a file
35 result.writeToFile('./shotend.png','png')
2、 &将画面定位在Apidemos的首页,此时光标定位在第一行。
3、 &在$Android_Root\tools目录下运行一下命令:
monkeyrunner monkeyrunnerprogram1.py
4、在运行过程中我们可以看见光标不断向下移动,并且可以在当前目录下我们自定义的截图:
运行前:shotbegin.png
运行后,shotend.png(在代码中进行了5次KEYCODE_DPAD_DOWN操作)
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
历数最佳安卓应用自动化测试工具
关键字:自动化测试
  现今社会,几乎每个测试程序中都会用到自动测试。这不足为奇,因为最佳测试工具极大地缩减测试过程。当然不包括人为因素造成的错误和纰漏。关于自动化的测试工具有很多选择。其中一些是免费的,一些相当昂贵。一些自动化工具许多年前就有了;一些刚刚在市场上出现。但每一个工具都是独特的,都有自己的特点。
  正因为广泛可选的自动化工具使得在为一个项目选择最合适的一款变得有些困难。问题在于,几乎任何一款现存的工具都不能完全满足项目的需求。
&&& 为了使自动检测有效我们应该讲究技巧:
&&& 1、在测试和项目开始之前对软件产品进行调研;
&&& 2、明确什么测试需要自动化;
&&& 3、对自动化测试和自动化工具进行需求规划;
&&& 4、研究至少一些可用的或者合适的自动化工具;
&&& 5、基于调研选择一款最适合的或者更多工具;
&&& 6、和其他项目组成员讨论选定的自动化工具,阐明原因,得到他们的认可;
&&& 7、进行自动化测试。
  这些方法和步骤被大多专家认可。
  最近,各种各样的电脑涌现,他们的出现开始加速了软件产品的发展。最令人吃惊的是移动设备的演化;他们和个人电脑最大的区别在特质,途径和互动条件。
  因此,区别于需要特殊的应用程序。
  大多数个人电脑的是Windows。主流的操作系统有安卓,iOS,,Windows,塞班等等
  让我们一起来探究下现在最流行的自动化测试系统的应用程序―安卓
  1、Robotium――安卓测试工具
  Robotium是安卓系统最常用的自动化测试工具,并且是一款免费的安卓UI测试工具。它适合于各种不同的安卓版本及其下行版本。软件开发者经常把它称作安卓硒。Robotium创建的测试使用Java写的。事实上,Robotium是一个个体测试。
  但是Robotium需要花费很长时间努力去创建测试,就像为了自动化程序创建的源代码。它不适合互动的软件系统,不能锁住和解锁智能手机。Robotium没有记录和播放功能,它不支持截屏。
  2、MonkeyRunner――安卓App测试工具
  MonkeyRunner是最流行的有自动化功能的安卓软件测试工具。MonkeyRunner比起Robotium要低端一些。它并不处理源代码。测试创建是用Python写的,其中可能使用记录工具,为了创建测试。MonkeyRunner可以在连接状态的PC或者模拟器上运行测试。它有一个应用程序接口可以控制智能手机或者模拟器。但手机APP测试工具的最大缺陷是每个设备都要编写脚本。另一个缺陷就是,每次测试程序发生改变时都要调整。
  3、Ranorex――安卓App测试工具
  Ranorex是一个不错的自动化测试工具,不仅最新版本, 2.2.以上版本都是可以的。Ranorex的好处在于它有详细的截屏报告。他可以通过上接智能手机或者电脑。通过这个 Android 工具,自动化的测试工程师可以详细描述测试,但不包括 XML 数据格式。Ranorex可以地创建测试,自动化测试工程师只需点击鼠标。Ranorex允许附加的程序。这个模块可以被用于开发更为复杂的测试场景中。Ranorex是一个商业化的移动应用程序的工具;其许可价格是 1990欧元/年。Ranorex搜索相当慢;它需要 30 秒的时间来执行操作。其中一个必须为Ranorex文书的 文件。否则它不能通过这个工具进行自动化测试,它只能在APK 文件下工作。
  4、Appium――安卓自动化测试工具
  Appium是为iOS和安卓系统创建的自动化测试框架,是一个免费工具。它支持 2.3 及更高版本的。Appium利用WebDriver界面运行测试。它支持许多编程语言,如 Java、 C#、Ruby和其他的WebDriver数据库。它可以在移动设备上控制 Safari 和Chrome。但是,一些自动化的测试工程师抱怨它提供的报告不足。它的缺点也减少了对于XPath在移动设备上的支持。
  5、UI Automator――安卓自动化测试
  最近推出了这一工具。它支持从4.1开始的安卓版本。我们应该选择另一个更早期的安卓应用程序进行自动化测试。UI Automator能够与各类安卓系统兼容,包括系统的应用程序。这使得UI Automator可以锁定和解锁智能手机或平板电脑。通过该工具创建的脚本可以在许多不同的安卓平台上执行。它允许复制用户的操作复杂的序列。UI Automator也可以利用外部按钮的装置调节,打开和关闭设备的按钮。
  UI Automator可以与测试框架TestNG集成。在这种情况下,用户界面自动可以生成内容丰富和详细的报告,类似于由Ranorex生成的报告。此工具搜索速度还非常快。在许多安卓平台上测试后,软件测试专家认为UI Automator是质量最好的移动应用程序。它是安卓做好的应用程序之一,它由谷歌推出。
  通常大约 80%的新软件的 bug 都会重现支持的平台。其余 20%出现在其他平台上。这意味着,在大多数情况下,事先测试软件产品比盲目使用更好。
  目前, Android 4.1 版本安装了约 66%操作系统的设备。这就是为什么许多自动化的测试工程师经常决定UI Automator是最合适的解决。
  结论:
  测试自动化是一个复杂的工作。它需要充分的准备和更深入的研究。我们应该跟上信息技术在应用程序的创新。这将是创建最有效测试的重要前提。
[ 责任编辑:李代丽 ]
SAPPHIRE NOW大会为…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyteandroid的自动化测试方案,弄了好久了。
Google在sdk4.0以后提供了一个自动化解决方案uiautomator:
优点:可以跨应用了;这可是亲生的;
缺点:必须sdk4.0以上版本;要想实现的好,最好有开发配合;java项目编译为jar后需要push到手机才能运行,也就是说必须打印日志暴力调试。
后来听到群友Teddy说到appium和calabash-android,翻了一下appium的文章,发现:
Appium基于Android InstrumentationFramework和UIAutomator,也就是说这个工具是可以跨应用的。说远了,好吧,为了帮大家更容易理解appium的使用,我这里就讲一下uiautomator的使用方法。
首先提供uiautomator的官方网页:
你应该有android-sdk吧,升级到4.0以上,进入目录android-sdk\tools,你会看到两个文件:
traceview.bat 和 uiautomatorviewer.bat,这俩文件让你想起了monkeyrunner了吧,是的,traceview.bat就对应于hierarchyviewer.bat,用来查看程序的ui界面的,通常也是使用管理员权限启动的。
除了androidsdk,还需要弄一个ant,用来编译程序用,配置一下环境变量:
ANT_HOME=C:\PROGRAM\apache-ant-1.8.2&
好了,现在用eclipse创建一个java project,是的,你没看错,是java project不是android project,添加引用:
在project.properties中内容为:
# Project target. target=android-16
这里的android-16需要和之前的android.jar和uiautomator.jar位置相一致。
然后呢?写代码吧,建立一个类,得,发个给大家参考:
package com.uia.example. & & import org.apache.http.util.EncodingU & import android.graphics.B import android.graphics.BitmapF import android.graphics.R import android.os.E & & import com.android.uiautomator.core.UiO import com.android.uiautomator.core.UiObjectNotFoundE import com.android.uiautomator.core.UiS import com.android.uiautomator.core.UiS import com.android.uiautomator.testrunner.UiAutomatorTestC & import java.io.F import java.io.FileOutputS import java.io.IOE & & public class TAppWorkAssistV1& extendsUiAutomatorTestCase {&&
&&&&& public StringsL &&&&& public Filefout =null; &&&&& public FileOutputStreamoutStream=null; &&&&&
&&&&& public void write2file(String filename,String sData) &&&&& { &&&&&&&&&& String sLog=&&; &&&&&&&&&& //初始化日志文件 &&&&&&& if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ &&&&&&& && sLog = Environment.getExternalStorageDirectory().getAbsolutePath(); &&&&&&& &&
&&&&&&& && try{ &&&&&&&&&&& &&&& fout =
new File(sLog,filename); &&&&&&&&&&& &&&& outStream =
new FileOutputStream(fout,true);&&//此处的true是append &&&&&&&&&&& &&&& sData=sData +&\n&; &&&&&&& &&&&&&&& outStream.write(sData.getBytes()); &&&&&&& &&&&&&&& outStream.flush(); &&&&&&&&&&& &&&& outStream.close(); &&&&&&&&&&& &&&& fout=null; &&&&&&&&&&& }
&&&&&&&&&&& catch(Exception e){ &&&&&&&&&&& &&&& e.printStackTrace();
&&&&&&&&&&& } &&&&&&& }else{ &&&&&&& && System.out.println(&该手机没有SD卡&); &&&&&&& } & &&&&& } &&&&&
&&&&& public void testDemo() throws UiObjectNotFoundException { & &&&&&&&&&& && //1. 启动app &&&&&&&&&& && getUiDevice().pressHome(); &&&&&&&&&& && UiObject allAppsButton = new UiObject(new UiSelector().description(&Apps&)); &&&&&&&&&& && allAppsButton.clickAndWaitForNewWindow(); &&&&&&&&&& &&
&&&&&&&&&& && UiObject appsTab = new UiObject(new UiSelector().text(&Apps&)); &&&&&&&&&& && appsTab.click(); & &&&&&&&&&& && UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true)); &&&&&&&&&& &&
&&&&&&&&&& && UiObject settingsApp = appViews.getChildByText(new UiSelector().className(android.widget.TextView.class.getName()),&Efilm&); &&&&&&&&&& && settingsApp.clickAndWaitForNewWindow(); &&&&&&&&&& &&
&&&&&&&&&& && //2. 进入主界面 &&&&&&&&&& && System.out.println(&into main view&); &&&&&&&&&& && System.out.println(getUiDevice().waitForWindowUpdate(&com.eshore.efilm&, 60000)); &&&&&&&&&& && System.out.println(&intoed main view&); &&&&&&&&&& && UiObject tv1 = new UiObject(new UiSelector().text(&影院&)); &&&&&&&&&& && tv1.click(); &&&&&&&&&& &&
&&&&&&&&&& && //3.点击影院 &&&&&&&&&& && UiObject oyy= new UiObject(new UiSelector().description(&cinema_row&)); &&&&&&&&&& && System.out.println(&wait yingyuan come out&); &&&&&&&&&& && oyy.waitForExists(60000); &&&&&&&&&& && System.out.println(&yingyuan come out&); &&&&&&&&&& && oyy.clickAndWaitForNewWindow(); &&&&&&&&&& && System.out.println(&click yingyuan&); &&&&&&&&&& &&
&&&&&&&&&& && //4.场次 &&&&&&&&&& && UiObject occ= new UiObject(new UiSelector().description(&LinearLayout10&)); &&&&&&&&&& && System.out.println(&wait changci come out&); &&&&&&&&&& && oyy.waitForExists(60000); &&&&&&&&&& && System.out.println(&changci come out&); &&&&&&&&&& && occ.clickAndWaitForNewWindow(); &&&&&&&&&& && System.out.println(&click changci&); & &&&&&&&&&& && //5.座位 &&&&&&&&&& && UiObject oseat= new UiObject(new UiSelector().description(&cinema_shows_list_item&).index(0).childSelector(new UiSelector().description(&LinearLayout10&))); &&&&&&&&&& && System.out.println(&wait seat come out&); &&&&&&&&&& && oseat.waitForExists(5000); &&&&&&&&&& && int h=getUiDevice().getDisplayHeight(); &&&&&&&&&& && int w=getUiDevice().getDisplayWidth(); &&&&&&&&&& && System.out.println(&(h/2,w/2)=&+h/2+&,&+w/2); &&&&&&&&&& && getUiDevice().click(h/2,w/2); & &&&&&&&&&& && //System.out.println(&seat count:&+String.valueOf(oseat.getChildCount())); &&&&&&&&&& && //System.out.println(&seat getText:&+ oseat.getText()); &&&&&&&&&& &&
&&&&&&&&&& && //截座位图 &&&&&&&&&& && P &&&&&&&&&& && try { &&&&&&&&&&&&&&&& && process = Runtime.getRuntime().exec(&screencap /mnt/sdcard/EfilmFailSnapShot01.png&); &&&&&&&&&&&&&&&& && try { &&&&&&&&&&&&&&&&&&&&& && process.waitFor(); &&&&&&&&&&&&&&&& && } catch (InterruptedException e) {&&&&&&&&&&&&&&&&&&// TODO Auto-generated catch block &&&&&&&&&&&&&&&&&&&&& && e.printStackTrace(); &&&&&&&&&&&&&&&& && } &&&&&&&&&& && } catch (IOException e) { &&&&&&&&&&&&&&&& && // TODO Auto-generated catch block &&&&&&&&&&&&&&&& && e.printStackTrace(); &&&&&&&&&& && } & &&&&&&&&&& && //takeScreenShots(&EfilmSeatSnapShot&); & &&&&& } &&&&&
这个例子是随便写的,可能不够严谨。大体就这么个情况吧。下一步就是编译执行了,先插上手机usb接口,然后打开cmd,执行:
找到SDKID,也就是android create中的-t参数: cd C:\ PROGRAM\android-sdk\tools android list
找到t参数的值以后:
cd C:\ PROGRAM\android-sdk\tools android create uitest-project -n TAppWorkAssistV1 -t 25 -p C:\android自动化\Tv2.0\TestSetting cd C:\android自动化\Tv2.0\TestSetting ant build cd C:\android自动化\Tv2.0\TestSetting\bin adb push TAppWorkAssistV1.jar /data/local/tmp/ adb shell uiautomator runtest TAppWorkAssistV1.jar -c com.uia.example.my. TAppWorkAssistV1
看了看,好像没有什么特别值得解释的
-n TAppWorkAssistV1:类名
-p: 项目所在目录
Ant build 把这个类编译成一个jar包:TAppWorkAssistV1.jar
然后把jar包push到手机上,调用执行这个类就可以了
大致是这么个步骤,不过有一个非常重要的细节,就是如果你需要更省心,就最好把界面元素,无论动态的还是布局文件中的,都加上content-description属性,并保证唯一性,根据:
UiSelector:description(String desc)
Set the search criteria to match thecontent-description property for a widget.
那就可以统一只使用这一个引用界面元素的方法就行了,就不用去想方设法利用其它的属性来引用了。
如果你没有源码,那就只能根据那个traceview.bat工具来找不同的引用方法了,如果有源码,可以参考下文:
说回来了,appium还有instrument部分,可以参考下文:
或者参考ranorex的instrument代码,就可以理解instrument是怎么回事了,说穿了加上个instrument的jar包引用,然后设hook。
有了这几部分知识做底,appium如何实现就会比较容易理解了。
如有错漏,不吝赐教。

我要回帖

更多关于 自动化测试工具 的文章

 

随机推荐