1、网络测试技术与应用5.1 IOS测试策略 测试策略会贯穿整个测试工程,它包括测试中每一个阶段的工具、流程和方法的描述。在之前的章节中虽然涉及工具和方法等方面的描述,但都比较分散并且没有明确地提出测试策略这个概念。本章将会针对ios的测试策略及测试方法进行阐述。网络测试技术与应用 5.1 IOS测试策略 1功能测试 功能测试是最主要的测试类型。测试工程师需要根据产品的需求、用户的使 用场景和代码实现方式等设计测试用例,并且认真执行。之前介绍的一些自动化 测试技术会从不同的层面来完成功能测试。网络测试技术与应用 2兼容性测试 兼容性测试又被称为适配测试。兼容性测试的目的是要确保应用程序可以在所支持
2、的系统平台上正常运行。兼容性测试主要由硬件兼容性测试、软件兼容性 测试和数据兼容性测试组成。IOS设备的多样化使得兼容性测试更加重要。网络测试技术与应用3网络流量测试 由于在移动平台上存在网络接入点的多样化,并且不同的接入点会决定网络流量是否收费和网络网速等一些特性。所以网络及流量测试在移动平台上会作为单独的一种测试类型而存在。网络测试技术与应用 4升级测试 升级测试同样也是移动端测试特有的一种测试类型。应用程序从老版本升级 到新版本时,需要确保功能使用正常的测试活动是升级测试。网络测试技术与应用5.对于客户端的性能测试,可能是大数据的测试也可能是显示速度等方面的测试。性能测试可能会和之前提到
3、的稳定性测试和网络测试有一些重复的活动。本书中的性能测试只会涉及CPU,iOS内存和I/O等指标的监控,通过对一些基础的系统指标进行监控,从而得到一些基准数据并且通过数据之间的对比发现一些性能问题。网络测试技术与应用 6稳定性测试 稳定性测试是检验应用程序长期稳定的运行能力。一般的稳定性测试会通过一些边界值和非常规操作,来验证应用程序的问题性。稳定性测试也需要探索,因为有时稳定性测试的通过,也不能说明应用程序足够稳定。网络测试技术与应用5.2 APP兼容性测试 兼容性测试也被称为适配测试。兼容性测试需要考虑硬件兼容、软件兼容和数据兼容。兼容性测试对测试环境依赖度非常高网络测试技术与应用 iOS
4、端主流的硬件平台如下:iPhone:iPhone 5,iPhone 5S,iPhone 6,IPhone6S iTouch:iTouch 6 iPad:iPad air,iPad pro,iPad 3,iPad 4,iPad mini4网络测试技术与应用 iOS端主流的软件系统如下。IOS端主流的软件系统:iOS7:7.1、7.2 iOS8:8.1、8.2 iOS9:9.0、9.1网络测试技术与应用 苹果公司一直都很严格、谨慎地维护着iOS的生态系统,其中有这样一条规则:软件系统无法从高版本降至低版本。通过此条规则,可以对兼容性测试环境进行进一步的过滤,iPhone 5默认安装的最低系统版本是
5、iOS 8.1,所以在iPhone 5的硬件平台上就不再考虑更低的软件系统版本了。经过简化之后,得到了兼容性测试环境,如表5-1所示网络测试技术与应用 总之,兼容性测试不是简单地拿到不同的设备进行相同操作的机械劳动。兼容性测试需要结合应用程序本身的特点和iOS的相关特性进行针对性的测试,最终 快速得到测试反馈。更多的兼容性测试点需要在工作中总结和探索。网络测试技术与应用5.3 APP性能测试 一个iOS应用程序不只需要漂亮的页面和优雅的设计,还需要快速启动、及时响应用户交互和优秀的内存管理等。秉承用户第一的原则,为了给用户呈现更加优秀的iOS应用程序,必须对应用程序进行性能测试,通过测试定位并
6、且解决问题。网络测试技术与应用 1.快速启动测试 许多iOS应用程序启动一次需要十几秒,而用户希望尽快操作应用程序。可以使用Instrument的TimeProfile来分析启动时的CPU消耗,并且以消耗CPU的数据为依据进行优化。以下将通过一个具体的例子详细介绍如何使用TimeProfile来分析应用程序启动性能并找出被浪费的CPU处理周期。网络测试技术与应用 2.内存泄露检查 内存占用的优化管理一直是iOS开发者关心的问题之一。由于Objective不支持垃圾自动回收技术,所以开发者需要更加小心地处理内存管理的相关问题。除了开发工程师在编码阶段格外小心地管理内存以外,还需要具备一种内存泄露
7、的检査手段。网络测试技术与应用 3.设备CPU和内存等关键指标的记录对比,所有的性能测试都会监控测试对象的运行环境,记录CPU,内存和I/O的一些指标,用于分析对比。在iOS方面一般使用Instruments来统计应用程序CPU,内存和I/O的使用情况。网络测试技术与应用5.4 APP稳定性测试 稳定性测试的理论范畴很大,涉及硬件平台、软件系统和具体的应用程序。在iOS测试领域内,猴子测试被作为稳定性测试的主要手段。猴子测试即像猴子一样随意地没有规律地操作应用程序。网络测试技术与应用 Android系统自带了猴子测试的工具,开发者可以直接使用。iOS没有官方的猴子测试工具,笔者基于UI Aut
8、omation写了猴子测试脚本。测试脚本的位置为:https:/ Instruments中运行UI Automation脚本即可。网络测试技术与应用 在自动化的猴子测试执行完成以后,还可以考虑在一些零界条件下对应用程序进行稳定性测试。可以主要考虑以下条件:(1)频繁收到内存告警。(2)电池电量低;(3)3G网络不稳定时断时续 在以上极端的情况下程序的稳定性更为重要。网络测试技术与应用5.5 IOS UI自动化测试 Apple官方提供的UI Automation工具,目前很多的开发者都使用UI Automation工具做自动化测试,从而替代以前的需要人手动操作的重复的劳动网络测试技术与应用Ul
9、Automation的简介 一般的自动化测试的工具在测试过程中,测试人员通过编写一些脚本就可以达到自动化操作的目的,如果性能更优越的自动化工具同时还具备录制脚本的功能,录制脚本可以让脚本的开发强度降低一些,但是大部分工作还是需要测试人员编写脚本来完成。网络测试技术与应用 UI Automation不但支持脚本编写方式的自动化测试,并且还支持录制回放方式的自动化测试,是一款功能强大的自动化测试工具。UI Automation体系结构,UI Automation,微软提供的UI自动化库。它包括在.NET Framework 3.0中,是Windows Presentation Foundation
10、(WPF)的一部分,可进行UI测试自动化。网络测试技术与应用 此自动化库一开始就是为可访问性和UI测试自动化任务而专门设计的,使用UI自动化库来测试运行支持.NET Framework3.0的操作系统,在UI Automation中,所有的窗体、控件都表现为一个AutomationElement、AutomationElement中包含此控件或窗体的属性,在实现自动化的过程中,通过其相关属性进行对控件自动化操作。网络测试技术与应用 对于UI用户界面而言,所用显示的桌面上的UI,其实际上是一个UI Tree,根节点是Desktop。在UI Automation中,根节点表示为Automation
11、Element RootElement。通过根节点,可以通过窗体或控件的Process Id、Process Names或者Windows Name找到相应的子AutomationElement,网络测试技术与应用 1、在服务器端由UIAutomationProvider.dll 和 UIAutomat-ionTypes.dll 提供;2、在客户端由UIAutomationClient.dll 和 UIAutomationT-ypes.dll提供;3、UIAutomationCore.dll 为UI自动化的核心部分,负责服务器端和客户端的交互;4、UIAutomationClientSideP
12、roviders.dll 为客户端程序提供自动化支持。网络测试技术与应用 在UI自动化库体系结构中使用客户端-服务器视点和命名约定。从UI测试自动化的角度来看,意味着所测试的应用程序被称为服务器,测试工具被视为客户端,测试工具客户端向所测试的应用程序(服务器)请求UI信息。网络测试技术与应用5.5.2 UI Automation脚本编辑 Apple官方提供的实例程序Recipes程序,该程序可以在Xcode中搜索Recipes,然后找到iPhoneCoreDataRecipes 项目下载到本地,然后用Xcode进行打开使用。UI Automation大多数的基本功能都可以通过Recipes程序
13、来掌握.。大部分自动化测试脚本的编写都是基于Recipes所提供的控件来完成的,网络测试技术与应用 UIAApplication控件 把所有的控件信息汇总下,依据控件之间的父子关系,可以把Recipes程序首页面转化为树形结构的控件关系,网络测试技术与应用5.5.3 UI Automation 实践 人机交互方式是最常见的操作应用程序的方法,交互方式的方式方法很多,这样交互的方式总的概况为3个大类,这3个大类被使用的频率最高,:用户单指点击(tap);用户使用模拟键盘输入;应用程序屏幕显示输出内容信息网络测试技术与应用 实践1:在Recipes程序中添加一个菜单名字叫做“饺子”。大致的操作流程
14、如下。具体的操作说明如下:1、在主页面单击按钮;2、在新的页面中输入“饺子”,并且单击按钮;3、单击按钮,回到主菜单页面;4、可以看到新增“饺子”菜单。网络测试技术与应用 在API调用方式上也有一些其别,所以这里再次细分了两种方式,分别为UIAElement方式和UIATarget方式。1.UIAElement方式 2.UIATarget方式网络测试技术与应用5.5.4 UI Automation Logger日志 负责日志输出的对象是UIALogger,主要有两部分的职责:记录测试结果;负责各个级别的日志结果输出。在记录测试结果方面,有logFail()、logPass()方法和logSta
15、rt()方法。网络测试技术与应用 logStart()方法会在测试即将开始的时候调用,并且在测试结束后,和logFail()或logPass()方法配对出现完成一个测试方法的开始部分和最后的完成部分的结果记录,logPass()和logFail()是一对函数,分别表示方法测试通过和未通过。网络测试技术与应用第6章 Android APP自动化测试 6.1Android的白盒与黑盒自动化测试 白盒测试:在手机自动化测试领域,白盒测试包括两种类型,第一种是传统软件测试理论中所指的白盒测试,即依赖被测对象的源代码具体实现的测试方式。在手机软件开发过程中所做的单元测试即属于此类型。网络测试技术与应用
16、黑盒测试 相对于白盒测试而言,黑盒测试指的是通过外部指令驱动手机并通过外部方式进行测试结果校验的测试方式,即不考虑系统本身提供的自动化测试能力,所有的测试行为均在系统外部进行。网络测试技术与应用6.2Android Instrumentation测试框架 Instrumentation测试框架有以下三个核心点:1.拥有基于JUnit的测试集合,不但可以直接使用JUnit,不调用任何Android API来测试一个类型,也可以使用Android JUnit扩展来测试Android组件。网络测试技术与应用 2.Android JUnit扩展为应用的每种组件提供了针对性的测试基类。3.Android
17、开发工具包(SDK)既通过Eclipse的ADT插件提供了图形化的工具来创建和执行测试用例,也提供了命令行的工具,以便与其他IDEs集成,这些命令行工具甚至可以创建ant时编译脚本。网络测试技术与应用 Android测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序可以精确控制应用程序。在Android中,测试程序也是Android程序,因此,它和被测试程序的书写方式有很多相同的地方。SDK工具能帮助你同时创建主程序工程及它的测试工程。你可以通过Eclipse的ADT插件或者命令行来运行Android测试。Eclipse的ADT提供了大量的工具来创建测试用例
18、,运行以及查看结果网络测试技术与应用 Android提供了基于JUnit测试框架的测试API来书写测试用例和测试程序。另外,Android还提供了强大的Instrumentation框架,允许测试用例访问程序的状态及运行时对象(1)基类是AndroidTestCase,一般常见的是它的子类,和特定组件关联。子类有:ApplicationTestCase测试整个应用程序的类。网络测试技术与应用 ProviderTestCase2测试单个ContentProvider的类。lServiceTestCase测试单个Service的类。继承自JUnit TestCase类,并可以使用Instrumen
19、tation框架,用于测试Activity。网络测试技术与应用(2)基类是InstrumentationTestCase。它的所有子类都能发送按键或触摸事件给UI。子类还可以注入一个模拟的Intent。ActivityTestCaseActivity测试类的基类。SingleLaunchActivityTestCase测试单个Activity的类。网络测试技术与应用 SyncBaseInstrumentation测试Content Provider同步性的类。ActivityUnitTestCase对单个Activity进行单一测试的类。ActivityInstrumentationTestC
20、ase2在正常的系统环境中测试单个Activity的类网络测试技术与应用(3)Assert类 Android还继承了JUnit的Assert类,其中,有两个子类,MoreAsserts和ViewAsserts:lMoreAsserts类包含更多强大的断言方法,如assertContainsRegex(String,String),可以作正则表达式的匹配。网络测试技术与应用(4)Mock对象类 Android有一些类可以方便的创建模拟的系统对象,如Application,Context,Content Resolver和Resource。Android还在一些测试类中提供了一些方法来创建模拟In
21、tent。网络测试技术与应用 IsolatedContext模拟一个Context,这样应用程序可以孤立运行。与此同时,还有大量的代码帮助我们完成与Context的通信。这个类在单元测试时很有用。RenamingDelegatingContext当修改默认的文件和数据库名时,可以委托大多数的函数到一个存在的、常规的Context上。网络测试技术与应用 (5)Instrumentation TestRunner Android提供了自定义的运行测试用例的类,叫InstrumentationTestRunner。这个类控制应用程序处于测试环境中,在同一个进程中运行测试程序和主程序,并且将测试结果输
22、出到合适的地方。网络测试技术与应用6.2.1仪表盘技术 Android的仪表盘对象是Android系统中的一些控制函数,这些函数在每次的应用启动之前,就会被系统创建而成,用来监视Android系统和应用之间的交互。另外仪表盘对象通过向应用动态插入跟踪代码、调试技术、性能计数器和事件日志的方式来操控应用。网络测试技术与应用6.2.2使用仪表盘技术编写测试用例 用户在命令行或者从Eclipse中运行测试用例时,首先要把测试用例程序和待测应用部署到测试设备或模拟器上,再通过InstrumentationTestRunner这个对象依次执行测试用例 程序中的测试用例,InstrumentationTe
23、stRunner支持很多参数,用来执行一部分的测试用例,每个测试用例都是通过仪表盘技术来操控待测应用的各个组件实现测试目的。网络测试技术与应用 Android 仪表盘框架是基于JUnit 的,ActivityInstrumentationTestCase2 是从 JUnit 的核心类TestCase中继承下来的,这样做的好处就是可以复用JUnit的assert功能来验证由用户 交互和事件引发的GUI行为,而且也让有多年JUnit编程经验的程序员容易上手。仪网络测试技术与应用6.2.3执行仪表盘测试用例除了通过Eclipse,还可以在命令行用Android系统自带工具am执行仪表盘测试用例,如果
24、不带参数调用,则会执行除性能测试以外的所有测试用例。网络测试技术与应用 的格式一般是“测试用例包名/android.test.tastrumentationTestRunner”,例如要执行本章的示例来测试用例,首先需要将其和待测应用安装到设备或模拟器上,在虚拟机的命令行中输人下面的命令即可执行所有的测试用例:网络测试技术与应用6.3monkey工具及其使用 本小节讲解使用两个名字很相近的工具monkey和monkeyrunner在没有源代码的情况下对应用执行黑盒测试的方法。网络测试技术与应用 Android SDK提供了 monkey和monkeyrunner两个测试工具,这两个工具除了名字
25、类似外,还都可以向待测应用发送按键等消息,因此往往让很多初学者产生混淆。下面介绍一下它们之间的不同点。monkey运行在设备或模拟器上面,可以脱离PC运行,而 monkeyrunner运行PC上,需要通过服务器/客户端的模式向设备或模拟器上的Android应用发送指令来执行测试。网络测试技术与应用 普遍的做法是将monkey作为一个向 待测应用发送随机按键消息的测试 工具,验证待测应用在这些随机性 的输人面前是否会闪退或崩溃。而 monkeyrunner则接受一个明确的测试脚本(使用Python语言编写的)。虽然monkey也可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持
26、读取待测界面的信息来执行验证操作。而monkeyrunner的测试脚本中有明确的条件判断等语句,可用来做功能测试。网络测试技术与应用 运行运行monkey monkey的命令列表和参数都比较多,但可以将这些选项归类成以下几大类:基本参数设置,例如设定要发送的消息个数。测试的约束条件,比如限定要测试的应用。发送的事件类型和频率。调试选项。网络测试技术与应用 当monkey运行时,它随机生成并向系统发送各种事件,并监视待测应用是否会碰到如下三种情况:如果限定monkey只测试一个或几个特定包,monkey会阻止待测应用跳转到其他包的任何尝试。如果待测应用闪退或收到任何未处理的异常,monkey就会
27、终止并报告这个错误。如果待测应用出现停止相应的错误,monkey也会终止并报告这个错误。网络测试技术与应用 6.3.1monkey工具命令参考-help 打印帮助消息-v 命令行的每一个-v将增加反馈信息的级别。-s 伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。网络测试技术与应用-throttle 在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被产成。-pct-touch 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。网络
28、测试技术与应用 -pct-motion 调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。-pct-trackball 调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。网络测试技术与应用-pct-nav 调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。-pct-majornav 调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)网络测试技术与应用 -pct-syskeys 调整“系统”按键事件
29、的百分比(这些按键通常被保留,由系统使用,如Home、Back、StartCall、EndCall及音量控制键)。-pct-appswitch 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。网络测试技术与应用-pct-anyevent 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。约束限制-p 如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。网络测试技术与应用 -c 如果用此参数指定了一个或几个类别
30、,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选择下列类别中列的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选项只能用于一个类别。网络测试技术与应用-dbg-no-events 设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序
31、所调用的包之间的转换。网络测试技术与应用-hprof 设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(5Mb),网络测试技术与应用-ignore-crashes 通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。-ignore-timeouts 通常,当应用程序发生任何超时错误(如“ApplicationNotResponding”对话 框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。网络测试技术与
32、应用-ignore-security-exceptions 通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。网络测试技术与应用-kill-process-after-error 通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。网络测试技术与应用-monitor-native-crashes 监视并报告An
33、droid系统中本地代码的崩溃事件。如果设置了-kill-process-after-error,系统将停止运行。-wait-dbg 停止执行中的Monkey,直到有调试器和它相连接。网络测试技术与应用 6.3.2monkey脚本 除了生成随机的事件序列,monkey也支持接受一个脚本解释执行命令,而且既可以直接为monkey命令指定脚本文件路径来执行(通过“-f”选项指定),也可以以客户端/服务器的方式执行(“-port”选项)。网络测试技术与应用(1)DispatchPointer(5109520,5109520,0,353,325,0,0,0,0,0,0,0)#发送抬起事件,downTi
34、me和eventTime是一样的,但是比前个事件的值多了点时间#表示手指在这个位置上的停顿 DispatchPointer(5109521,5109521,1,353,325,0,0,0,0,0,0,0网络测试技术与应用(2)DispatchTrackball DispatchTrackball命令用于向一个指定位置发送单个跟踪球消息。其使用方式和 DispatchPointer 完全相同。网络测试技术与应用(3)RotateScreen RotateScreen命令用于发送屏幕旋转事件。命令形式如下,共两个参数:RotateScreen(rotationDegree,persist)rota
35、tionDegree,旋转的角度,参考android.view.Surface里的常量。persist,是否保持旋转后的状态,0为不保持,非0值为保持。网络测试技术与应用 (4)DispatchKey DispatchKey命令用于发送按键消息。命令形式如下,共8个参数:DispatchPointer(downTime,eventTime,action,code,repeat,metaState,device,scancode)关键参数是下面5个:网络测试技术与应用 downTime,发送消息的时间,只要是合法的长整型数字即可。eventTime,主要是用在指定发送两个事件之间的停顿。acti
36、on,消息是按下还是抬起,0表示按下,1表示抬起。code,按键的值,参见KeyEvent类。repeat,按键重复的次数。其他参数均可以设置为0。网络测试技术与应用 (5)DispatchFlip DispatchFlip命令用于打开或关闭软键盘。命令形式如下:DispatchFlip(keyboardOpen)keyboardOpen,该参数为true表示打开,为false表示关闭键盘。网络测试技术与应用 (6)DispatchPress DispatchPress命令用于模拟敲击键盘事件。命令形式如下:DispatchPress(keyName)keyName,要敲击的按键,具体的值参见
37、KeyEvent。网络测试技术与应用 (7)LaunchActivity LaunchActivity命令用于启用任意应用的一个活动(界面)。命令形式如下:LaunchActivity(pkg_name,cl_name)pkg name,要启动的应用包名。cl_name,要打开的活动的类名。网络测试技术与应用 (8)LaunchInstrumentation LaunchInstrumentation命令用于运行一个仪表盘测试用例。命令形式如下:LaunchInstrumentation(test_name,runner_name)test_name,要运行的测试用例名。runner_name
38、,运行测试用例的类名。网络测试技术与应用 (9)UserWait UserWait命令用于让脚本中断一段时间。命令形式如下:UserWait(sleepTime)sleepTime,要休眠的时间,以毫秒为单位。网络测试技术与应用 (10)LongPress LongPress命令用于模拟长按事件,长按两秒。命令形式如下:LongPress()网络测试技术与应用(11)PowerLog PowerLog命令用于模拟电池电量信息。命令形式如下:PowerLog(power_log_type,test_case_status)Power_log_type,可选值有AUTOTEST_SEQUENCE_
39、BEGIN,AUTOTEST_TEST_BEGIN,AUTOTEST_TEST_BEGIN_DELAY,AUTOTEST_TEST_SUCCESS,AUTOTEST_IDLE_SUCCESS网络测试技术与应用(12)WriteLog WriteLog命令用于将电池电量信息写入SD卡。命令形式如下:WriteLog()网络测试技术与应用(13)RunCmd RunCmd命令用于在设备上运行shell命令。命令形式如下:RunCmd(cmd)cmd,要执行的shell命令。由于monkey在运行时具有超级用户root权限,其可以启动任意的命令,包括Android 系统底层使用的Linux命令。网络
40、测试技术与应用(14)Tap Tap命令用于模拟一次手指单击事件。命令形式如下:Tap(x,y,tapDuration)x,x坐标。y,y坐标。tapDuration,可选,单击的持续时间。网络测试技术与应用(15)ProfileWait ProfileWait命令用于等待5秒。命令形式如下:ProfileWait()(16)DeviceWakeUp DeviceWakeUp命令用于唤醒设备并解锁。命令形式如下:DeviceWakeUp()网络测试技术与应用(17)DispatchString DispatchString命令用于向shell输入一个字符串。命令形式如下:DispatchStr
41、ing(input)网络测试技术与应用(18)PressAndHold PressAndHold命令用于模拟一个长按事件,持续时间可指定。命令形式如下:PressAndHold(x,y,pressDuration)x,坐标。y,y坐标。pressDuration,持续的时间,以毫秒为单位计时。网络测试技术与应用 (19)Drag Drag命令用于模拟一个拖拽操作。命令形式如下:Drag(xStart,yStart,xEnd,yEdn,stepCount)xStart,拖拽起始的x坐标。yStart,拖拽起始的y坐标。xEnd,拖拽终止的x坐标。stepCount,拖拽实际上是一个连续的事件,这
42、个参数指定由多少个连续的小事件组 成一个完整的拖拽事件。网络测试技术与应用(20)PinchZoom PinchZoom命令用于模拟缩放手势。命令形式如下:PinchZoom(ptlxStart,ptlyStart,ptlxEnd,ptlyEnd,Pt2xStart,pt2yStart,pt2xEnd,pt2yEnd,stepCount)ptlxStart,第一个手指的起始x位置。ptlyStart,第一个手指的起始y位置。ptlxEnd,第一个手指的结束x位置。ptlyEnd,第一个手指的结束乂位置。网络测试技术与应用 pt2xStart,第二个手指的起始x位置。pt2yStart,第二个手
43、指的起始y位置。pt2xEnd,第二个手指的结束x位置。pt2yEnd,第二个手指的结束y位置。stepCount,细分为多少步完成缩放操作。网络测试技术与应用(21)StartCaptureFramerate StartCaptureFramerate获取巾贞率,在执行这个命令之前,需要设置系统变量 viewancestor.profile_rendering的值为true,以便强制当前窗口的刷新频率保持在60 Hz。命令形式如下:StartCaptureFramerate()网络测试技术与应用(22)EndCaptureFramerate EndCaptureFramerate 结束获取帧
44、率,将结果保存在/sdcarc/avgFrameRateOut.txt 文件里。命令形式如下:EndCaptureFramerate(input)input,测试用例名。调用结束后,会在avgFrameRateOut.txt中加上格式为“:”的一行新日志。网络测试技术与应用(23)StartCaptureAppFramerate StartCaptureAppFramerate命令用于获取指定应用的巾贞率,在执行这个命令之則,需要 设置系统变量viewancestor.profile_rendering的值为true,以便强制当前窗口的刷新频率保 持在60 Hz,命令形式如下:StartCap
45、tureAppFramerate(app)app,要测试的应用名。网络测试技术与应用(24)EndCaptureAppFramerate EndCaptureAppFramerate命令用于结束获取帧率,将结果保存在/sdcarcavgAppFrame-RateOut.txt 文件中。命令形式如下:EndCaptureAppFramerate(app,input)app,正在测试的应用名。input,测试用例名。网络测试技术与应用 6.3.3monkey服务器 除了支持解释脚本,monkey还支持在设备上启动一个在线服务,可以通过telent的方式从PC远程登录到设备上以交互的方式执行monk
46、ey命令,这需要用到monkey的“-port”参数。一般的习惯是将 1080端口分配给monkey服务,不过也可以根据读者自己的喜好和实际情况使用其他端口,接着再把模拟器上的端口重新映射到PC宿主机的端口:$adb-e forward tcp:1080 tcp:1080网络测试技术与应用 之后就可以使用telnet连接到monkey服务器上执行命令了,很遗憾,monkey服务器理解的命令格式和monkey脚本的命令格式完全不一样,而且支持的命令集合也不一样。而且与可以在monkey脚本中启动应用不同的是,monkey服务器没有办法启动应用。因此在通过服务器执行命令时,需要事先手动启动待测应用
47、,或者使用am命令启动。网络测试技术与应用 6.3.4编写monkeyrunner用例 monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。网络测试技术与应用 MonkeyRunner的特性 1)多设备控制:monkeyrunnerAPI可以跨多个设备或模拟器实施测试套件。您可以在同 一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序
48、依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。网络测试技术与应用 2)功能测试:monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸 事件的输入数值,然后观察输出结果的截屏。3)回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果 截屏相比较,以此测试应用的稳定性网络测试技术与应用 4)可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和 程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunnerAPI之
49、外,您还可以使用标准的Pythonos和subprocess模块来调用如adb这样的Android工具。网络测试技术与应用 2.运行 monkeyrunner monkeyrunner实际上是一个Python解释器,它的使用形式与Python命令类似,只不过 它在启动时事先设置好了一些Android类库的路径。如果启动monkeyrunner时指定了要运 行的Python脚本,则会逐行解释这个脚本;如果只执行monkeyrunner命令,就会显本一个 交互的解释器,网络测试技术与应用 手工编写 monkeyrunner代码 虽然monkeyrunner脚本使用Python语法编写,但它实际上是
50、通过Jython来解释执行的。Jython是Python的Java实现,它将Python代码解释成Java虚拟机上的字节码并执行,这种做法允许在Python中继承一个Java类型,可以调用任意的Java API也可以复用Java虚拟机自带的垃圾回收等机制。网络测试技术与应用 monkeyrunnerAPI于com.android.monkeyrunner包中包含三个模块:(1)MonkeyRunner:一个为monkeyrunner程序提供工具方法的类。这个类提供了用于连接 monkeyrunner至设备或模拟器的方法。它还提供了用于创建一个monkeyrunner程序的用户界面以及显示内置帮