P__k87吻1 0计划论谇_坛 如何电脑上用电脑来操作手机?

下载适用于 IT 专业人士的 90 天免费评估版

无论联机或脱机,均可随时随地访问你的文件

脱离服务器的束缚 - 无需管理基础结构即可更快地构建应用。

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

客户端SDK是为第三方开发者提供的軟件开发工具包包括SDK接口、开发文档和Demo示例等。SDK和应用之间是什么关系呢以云信即时消息服务为例,如下图所示应用客户端通过调鼡云信SDK接口,进行消息等数据查询存储等操作或通过协议与云信服务器间进行通信。

使用这种方式的好处是:

  • 文件内容类型较多容易絀错,代码不具备通用性有一定的二次开发难度
  • 需使用 gradle 重新编译,如工程较大耗时较长

除了上述方法,也可以在 Application 中读取一个 SD 卡配置文件根据配置文件的协议进行对应的操作。每次只需更改配置文件的内容并通过 adb push 放入 SD 卡指定路径中,然后重启 App 即可

  • 配置文件的协议可鉯随意定义,更灵活
  • 配置文件可以使用 json 格式修改更简单
  • 只需推到 SD 卡,耗时更少

三、iOS 端 SDK 自动化测试流程

1、引入“守护”App

如「iOS 端测试框架」所见此时进行通信只有一个应用,这个应用就是我们用来测试 SDK 的 Demo通过这个宿主我们可以触发 SDK 提供的任何 API,通过 iOS runtime 我们可以触发 SDK 的类方法、实例方法甚至是私有 API但这写都只局限于一个应用“沙盒”内,如上面说到的安装、卸载及 App 退出和切到后台就无能为力了所以我们引叺了另一个 Demo(Watch Demo),通过两个 Demo 的协同操作满足“沙盒”之外的需求

两个 App 互相唤醒和通信

如上面提到的,所有功能调用都基于约定的协议来执行嘚协议的设计也是不断新增的测试需求改造的。

最初 Server 端与客户端以测试用例的 case id 来区分需要触发的事件后来 case id 所代表的含义太多,而且客戶端也是以运行时不断调用 Server 端发送指令的形式表现执行的具体功能所以转为一条执行序列更加灵活及方便扩展。一个测试用例可分为多條执行序列执行序列内的协议包含了需要进行的方法调用或事件的处理。以 Dplus 为例如下数据包含了部分操作的执行序列:

 

由于是针对 SDK API 测試的协议,所以协议内的格式以调用的类名、方法名及参数为主再加上部分细节参数加以说明,如 type 是 class 则调用类方法是 instance 是示例方法。

需偠注意的是这个队列的结构是个字典,以标识前缀 $umeng_cloudayc_op 作为一个子事件的 keyvalue 则是其执行参数。而且可以看到在参数 param 的 value 里也有和子事件的 key 类似嘚值这里的设计也是为了满足部分嵌套调用的需求。举例来说如此时需要通过一个接口验证之前缓存的数据是否发送正常,就要分三步第一存储数据,第二将数据读出第三将第二步的结果作为参数传入最后调用的接口即可,这样既能满足各种嵌套逻辑又能实现远程构造客户端系统的实体对象作为参数进行接口调用。

回到上面的字典的结构实际上在之前的协议格式使用的是数组作为执行序列的封裝格式,不过在实际应用中无法满足灵活的要求就如上面所说的组合的调用逻辑,有部分子事件是被动调用的通过在其他事件内的参數检测来触发调用,如果是数组则无法控制这个执行序列的依赖关系采用字典后,增加启动字段在后续关联的子事件内,都会说明下┅个执行的子事件如果某个子事件是作为另外子事件的参数,则不会有 next 字段因为它是被动触发的,不在执行队列之内

在这个业务协議开发过程中,不断的根据测试需求进行改造、添加从一开始的单一应用调用接口,到后面的多应用切换、前后台切换以及应用断开和偅连需要多套控制流程,在具体实现时分散到了各个业务逻辑中,每增加一个控制都要兼容考虑是否会影响到其他模块而且作为一個自动化测试“框架”,提前梳理好核心部分的流程会让之后更易于开发和维护所以就引入了有限状态机的概念进行构造。

有限状态机(Finite-state machine)可用于模拟很多事物逻辑顾名思义,它是一个有限的状态的处理逻辑有下面几个特征:

  1. 在当前时刻只有一种状态存在;
  2. 一个状态茬满足某个条件后会切换到另一状态;
  3. 而有限状态机整体可以归纳为四个要素:现态、条件、动作以及次态。

现态指当前时刻所表现的状態

条件又称为事件即当前状态在满足这个条件后会触发一个动作,从而进行状态装换动作即在现态满足条件后需触发的一系列操作动莋完成后即状态进行迁移。动作也可以忽略在某些情况下,现态满足条件后也无需执行任何动作就切换到新的状态。次态是相对现态洏言表示了条件满足后迁移的状态,次态也可以与现态相同根据业务逻辑的特性及复杂程度,合适的使用有限状态机可以使得逻辑表达清晰、封装及维护都很直观和方便。当一个业务包含的状态越多就越适合使用优先状态机进行封装处理。有限状态机应用非常广泛如电子电路、编译器及网络协议

需要注意的是要区分“动作”和“状态”,如果将“动作”也视为“状态”会导致编写状态机时产生问題

4、有限状态机应用自动化测试

将业务逻辑应用到有限状态机,前提是需要熟悉对应的业务并将其中的状态、动作和条件等抽离出来,然后再做进一步的划分和关联构造出一个完整的有向图。

在自动化测试中有如下几个关键词:启动测试、监听、主 App 连接、守护 App 连接、接口调用、进入后台、进入前台、应用退出、崩溃、断开连接、重连等。

在日常开发中如果遇到上面的”事件”,可能就顺其自然的開始写判断、写调用可能不自觉的就写出了一个“有限状态机”,不过不会那么严格的区分什么是动作什么是状态只要满足最后的结果就能达成目的。但现在我们有意识的利用有限状态机进行划分分离出状态和动作以及状态迁移的条件。看上面的关键字好像都是一個个“动作”,仔细看“监听 (中)”又可能是一个状态但实际上我们还得需要结合业务的理解再抽象出一些状态,如“进入后台”则是跳转到了守护 App,当前是控制守护 App 的状态;若是“进入前台”则守护 App 跳转到了“主 App”是控制主 App 的状态。

如下图就用刚才抽象出的关键词构慥了一个简单的有限状态机:

  1. 如架构图描述的需要主 App 和守护 App 同时连接才可执行测试;
  2. 在连接完成后,状态直接迁移到等待测试指令的状態没有任何动作;
  3. 有些组合状态可以合成一个状态,如运行守护 App 状态时可能主 App 断开连接也可能保持连接,所以区分为两态分别管理;
  4. 當自动化测试框架启动后除了监听两个 App 同时连接,其他状态都是在已有 App 连接完成的前提下进行的所以大部分时间是在执行测试 case 调用及 App 切换的。

我要回帖

更多关于 P/A 的文章

 

随机推荐