随机测试(monkey、随机操作指令):
在多设备实行的根本上完成安装、启动、覆盖安装、monkey 测试 / 随机指令、卸载等一系列操作。
遍历测试(深度遍历、智能探索):

在 monkey 测试 / 随机指令的根本上,对实行步骤进行改造,将随机操作更换为 app 内部页面的深度遍历,设打算法策略在一定程度上对被测 app 进行智能探索操作。
UI 自动化测试(appium):
在自动化测试框架支持的根本上,供应多设备脚本运行能力,测试开拓职员只须要编写符合规则的测试脚本即可以在云测试平台上选择多个设备进行测试,得到测试结果。
在以上自动化测试的同时,测试报告中须要表示如下内容:
实时天生测试报告、测试结果数据实时获取设备的日志并有对应的剖析结果可控的自动化测试过程实行过程中设备页面截图或录制***测试结果中设备类型数据剖析在上面背景解释中,先容了几种测试类型需求,前两种的设计流程比较大略,也不须要外部职员的参与,第三种测试类型设计比较繁芜,后续文章解释也以第三种测试类型为主。
自动化实行框架设计自动化框架在
陈康康:知乎移动端云测试平台实践(二)—— Agent 设计和实现32 赞许 · 5 评论文章
中自动化框架调研比拟和各大云测试平台的利用,选择了在各方面都具有一定上风的自动化测试框架 appium 作为自动化测试的实行掌握层,本地启动 appium hub 的办法吸收脚本实行要求,这里就不多加赘述了。
脚本措辞和实行框架云测试平台是由 Java + kotlin 开拓,客户端掌握都是基于 Java 实现,这里自然选择 Java 作为脚本措辞,后续的脚本、流程解释也因此 Java 措辞实现为主,但是在脚本措辞选择上这里不是逼迫哀求,同样可以选择Ruby、Python、PHP,、JavaScript 和 C#,只是后续的实现须要平台多做一步兼容而已。
在脚本实行方面没有利用类似 junit、testng等第三方的运行框架,紧张是为了保持在运行过程中对脚本运行的掌握和运行数据的交互,如下是脚本运行实现方案:
1.由平台供应一定限定范围的脚本编写能力
紧张是指运行过程的脚本编写,以及如何供应类似截图、步骤日志、检讨点等公用方法,对付 Java 来说可以将一些公共的方法抽象出来放到脚本的父工具中,通过继续将脚本编写能力授予给脚本本身,Python 也可以统一一个标准的类库,通过引入的办法利用。
2.运行时由 agent 动态编译编写完成的脚本,反射实例化脚本工具
运行时处理脚本须要区分动态措辞和非动态措辞,还是以 Java、Python 为例,由于没有借用第三方的测试框架,触发脚本运行对付 Java 来说须要进行编译,也便是标题中说到的动态编译,然后通过反射实例化工具运行,这里有两个哀求,首先脚本编写须要在云测试平台限定的包内,其次脚本运行、继续的方法须要符合约定的规则。对付 Python 来说先将脚本内容以 IO 的办法写到内存中,然后反射通过字符串的形式,导入模块、去模块探求约定函数实行。
3.利用反射实例工具运行脚本,并调用实例中的方法和脚本进行数据、强掌握交互
实例化脚本后开始运行脚本,运行前须要将所须要的运行资料注入到实例中,例如: appium 的 appiumDriver,运行同时可以随时调用实例化工具中的约定方法对脚本运行进行掌握,比如获取实行步骤、日志、图片,通报参数,掌握脚本停息、运行、停滞等交互,这也是为什么没有利用一些第三方框架来触发测试的缘故原由。
通过上述过程基本上实现了用例到实行的基本过程,如图:
也便是说只要供应了符合规范的脚本,就可以利用框架的通用性将脚本运行在任何 appium 支持的设备上,在架构上也剥离了自动化测试最关键的事情部分即:脚本编写,也为脚本管理、数据模板结合等用例的功能丰富供应更多可能性。
流程设计如下是脚本自动化测试完全的业务实行方案:
自动化测试 UI 代码以 git 工程的办法托管在公司的 git 做事器上,在工程根本上编写脚本,调试脚本通过之后合并入 git 工程,在 gitlab 上每一个脚本都会有一个唯一的地址,通过这个地址可以获取到指定脚本,然后通过接口 / 表单的办法提交脚本运行测试,运行完成得到质量报告。
值得解释一下的是,在自动化测试过程中,公共方法、selenium / appium 公共 page object 等脚本数据会随着自动化测试的深入加倍弘大,以是须要图中的公共方法抽取过程,这样带来的好处是由于脚本的抽取、复用会使脚本的编写效率会越来越快。
如下是脚本实行流程构造图,包含脚本实行的流程和结果网络:
脚本实行数据、实行交互设计方案:
这里紧张表示的是脚本和运行平台间的数据交互、实行能力交互,比如脚本实行时须要利用到 appium 的 driver,而这个 driver 是通过平台的设备参数来决定的,在运行时平台动态天生 driver 然后通过协议类的办法注入 driver 到脚本内部,运行过程中通过协议类的停滞、停息、等待、销毁等方法进行掌握,运行完成后通过协议类获取到运行结果。在脚本须要一些特定的功能时,也可以通过协议类引入接口方法,然后运行平台通过接口代理的办法动态注入实现类的办法实现。
在履行的过程中创造有两个难点,紧张如下:
类和第三方包引用管理引起的脚本编译问题在自动化测试脚本编写过程中,不可避免须要利用一些引入包,比如一些方便的工具类利用包等,对付 JAVA 脚本来讲更新类、包引入等都须要重新编译支配才可以运行利用,测试平台不可能会由于脚本类、包的变革重新编译支配平台,而脚本的编写绝大部分都是类引入的变革,包引入变革的比例很小,以是在类的变革上利用 Java 动态编译技能办理类的动态引入,第三方的包引入更新则通过平台工程的发版提前引入这些包升级完成。协议类和包更新的自动化更新过程在云平台和脚本工程中间是通过协议类进行数据交互,而定义的这个协议类和包发生之后按照上面的方案来说是须要云平台重新支配才可以的,在实践中创造脚本的能力培植和扩展等都须要通过协议类的修正才能实现,这就决定了这个协议类会频繁的发生变更,以是 Agent 工程中在动态编译前,手动校验了做事器上的协议类版本,如果创造了新版则***新版的协议类 jar,在动态编译时更换到 -classpath 的协议类版本参数,这样就做到了指定协议类内容的动态更新和自动化支配。脚本设计在上面提到过 「对付 Java 来说可以将一些公共的方法抽象出来放到脚本的父工具中,通过继续将脚本编写能力授予给脚本本身」,以是脚本设计分两个模块:
协议父工具实现如图所示父工具中供应了测试驱动 androidDriver、log 日志、checkPoint 检讨点、img 截图等脚本能力
用例子工具编写如图所示,实际的脚本继续父工具的能力之后,可以完成编写干系页面测试逻辑、业务逻辑的自动化测试任务
脚本调试和运行平台脚本调试可以通过如下两种办法进行:
本地调试自行利用 main 方法、或者利用单元测试框架调试脚本通过
然后将主体修正为规定格式的自动化脚本,视情形修正 appiumDriver 引入办法、添加日志记录、截图、检讨点等
远程调试
远程调试须要在云测试平台上申请一台利用设备如图:
点击图中的按钮,将脚本粘入运行,如下图:
测试报告展示
报告紧张分为如下几个部分
测试基本信息紧张展示测试过程的 app 根本信息和测试干系的一些信息展示,概况展示脚本所有检讨点的通过比例,脚本运行的设备、通过、失落败的数据统计,运行概况展示每一个脚本在每一个设备上运行的过程和结果,以脚本和设备为维度,log 链接中会展示详细的脚本运行步骤日志
检讨点概况
脚本运行的核心结果,紧张展示这次自动化测试过程中所有的测试结果
截图/步骤/非常
在脚本运行结束后,通过反射的办法获取到脚本用例的详细数据,通过 「截图/步骤/非常」细化展示每一次运行的步骤、图片、和检讨结果
性能图表、过程***
同时在脚本运行过程中也会通过 appium 框架功能实现设备的网络高下行统计、
Get Performance Data - Appiumappium.io/docs/en/commands/device/performance-data/get-performance-data/
和
Start Screen Recording - Appiumappium.io/docs/en/commands/device/recording-screen/start-recording-screen/
,然后渲染性能数据天生图表并供应***回放脚本实行过程
作者:陈康康
出处:https://zhuanlan.zhihu.com/p/84323222