test

本文节选自:【架构拾集】——移动应用的自动化测试(BDD 方式)

我的上一篇关于自动化测试的文章,大抵已经在一年以前——《哪个才是最适合你的 Web UI 自动化测试框架》。这么长的时间里,没有相关的文章,总得给自己找一个合适的理由。

说说测试

编写测试是开发人员日常工作的一小部分,但并非是全部。即使是专业的测试人员,自动化测试也并非是全部的工作。与此同时呢,有了单元测试之外,对于自动化测试的需求,并不是那么强烈。速度,是我们不考虑自动化测试的主要原因,运行起来慢了,进一步地导致编写测试也慢了。

UI 上一旦有一丁点的修改,那怕是得引起多少的不愉快,不得不噗呲噗呲地去修改测试。我想说的无非就是,避免编写 “可怕” 地自动化测试,尽量用你的单元测试来保障质量。要是你们有 KPI 的限制,请将以上的文字当成废话。

似乎在有些公司里,自动化测试、单元测试并不是技术负责人要考虑的问题,可在我司并非如此,测试也在技术的范围里。每每开始一个项目时,就不得不去考虑自动化测试的问题,选用什么框架合适、需要前后端如何配合、怎样去替换第三方的服务。这些内容完全交给测试人员吧,怕是会遇到一些不顺。

测试人员有自己的测试技术栈,拥有自己的 “银弹” —— 过去的经验和代码库。哪怕经验再丰富的测试人员,有时遇到一些新的项目、技术栈,这些东西可能就用不上了,又或者是使用某些框架可能会更加便利。因此呢,要成为更好的技术人,测试也是要考虑的范畴。

说到 Web 方面的自动化测试,我算是个有经验的老手。从顶层的 DSL 到底层的 Web Driver,到底来说,还是颇有经验的。可是说到 APP 的自动化测试,在项目上尝试过,但也不敢说经验丰富。而最近的项目,正在实施相应的移动应用自动化测试。看了看方案,与之前的 Web 或者是 React Native 的自动化测试,从底层对比架构吧,相似、差距也不是太大。便想着写篇文章来记录一下,相应的架构设计。

技术远景

作为一个团队的技术负责人,我希望:拥有一个移动应用测试架构,它能快速让测试人员快速上手——阅读、编写测试用例。与此同时,我希望这些测试用例是能让非技术人员阅读,诸如业务分析人员,并且符合真实的用户使用场景。

架构设计

当我们谈到业务分析人员也能编写的测试,我们说的只有 BDD(Behavior Driven Development,行为驱动开发)。它是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA(测试人员)和非技术人员或商业参与者之间的协作。

BDD 在这一种上相当的迷人——能让非技术人员编写测试。而其核心的部分在于:创建了一个环境隔离的 DSL,仿人类语言的 DSL。咳咳,这个 DSL 实现起来,可不轻松。关注顶层 DSL 的同时,开发人员还要努力实现好底层的实现。举个简单的例子,如下是之前在 BDD 一文中的 DSL 示例,这是顶层的设计:

功能: 失败的登录 场景大纲: 失败的登录 假设 当我在网站的首页

对应的,开发人员需要编写实现:

...Given('当我在网站的首页', function() { return this.driver.get('http://0.0.0.0:7272/');});..

从上述的代码中,一眼就可以看出复杂的地方,实现一个领域特定(业务特定)的 DSL 语言。

我们要完成的 DSL 实现,上层是提供一个 DSL,下层则是对接 driver 的 Agent 层。在 Web 领域里,这个 driver 的 Agent 层负责对接不同的浏览器,诸如 Selenium,driver 则视不同的浏览器而有所不同,如 ChromeDriver、FirefoxDriver、PhantomJSDriver 等等。Selenium 这样的测试框架,除了通过 driver 直接操作了浏览器,还提供了不同语言的编程接口。

相似的,在 APP 领域也有这样的方案,它要通常这个 agent 来连接物理设备,并提供一系列的编程接口。

架构设计方案

对整个架构有了一个基本的认识之后,让我们继续往下移动,来重新发掘一下:我们究竟需要哪些基本元素?

  • BDD 测试框架,为开发人员提供可创建 DSL 的接口。
  • 移动设备的测试编程接口,提供一个操作移动应用的接口。
  • 连接移动设备的操作库,即移动端的 WebDriver。
  • 用于编写测试时的 UI 检查工具。

从这一点上来看,它与 Web 应用的 BDD 架构差不多。

为此,我们需要准备如下的一些框架:

  • Robot Framework,一个支持 BDD 的、基于 Python 编写的功能自动化测试软件框架。
  • Appium,是一个开源测试自动化框架,用于原生,混合和移动 Web 应用程序。它使用 WebDriver 协议来驱动 iOS、Android 和 Windows 应用程序。
  • XCUITest Driver,基于 Apple 官方的界面自动化测试 XCUITest 封装的测试接口,可以直接执行 iOS 的自动化测试。
  • UiAutomator2 Driver,则是 Google 官方提供的用于 Android 系统的测试接口,可以直接执行 Android 的自动化测试。
  • Appium Inspector,用于查找 iOS/Android 上的元素
  • UiAutomator Viewer,由 Android SDK 自带的元素查找工具。

由于我们计划的顶层是由 DSL 来实现,而对应的 BDD 层实现是由 Robot Framework 来完成的。Robot Framework 使用的是 Python 语言,我们就需要找到对应的 Python 主要依赖有:

  • robotframework,即 Robot Framework 本身
  • robotframework-appiumlibrary,用于为 Robot Framework 提供 Appium 相应的接口封装
  • robotframework-ride,用于 Robot Framework 的测试数据编辑器

有了这些主要的库,我们就可以编写我们的 DSL?不,我们还需要配置好,对应的移动端 Driver。

结论

还是 Web 大法好。

原文发布于微信公众号 - phodal(phodal-weixin)

原文发表时间:2018-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

谁说 Java 要过时?2017年Java 大事件回顾!

前端教程 关注即可习得新技能 ! 关键时刻,第一时间送达! 在过去的一年中,Java 历经了许多变化。在今年年初,Java EE 处于一个不确定的状态,Java...

2059
来自专栏企鹅号快讯

大话云存储

1、云存储的官方定义 云存储是一个以数据存储和管理为核心的云计算系统 即是指通过集群应用、网格技术或分布式文机房集中监控系统件系统等功能,将网络中大量各种不同类...

4346
来自专栏企鹅号快讯

谁说 Java 要过时?2017年Java 大事件一览及未来前瞻

在过去的一年中,Java 历经了许多变化。在今年年初,Java EE 处于一个不确定的状态,Java 9 版本也推迟了它的发布日期。在 2016 年的 Java...

2047
来自专栏phodal

从2016年11月期《技术雷达》看前端的未来

本文仅代表 Phodal 的个人观点,来听听一个前端程序员的 YY。 新一期的ThoughtWorks技术雷达有点出乎意料,使用new标签的框架、工具、技术、语...

21010
来自专栏灯塔大数据

干货|在选择数据库的路上,我们遇到过哪些坑?

我是 FactGem 的首席技术官 Clark Richey。FactGem 是一家小公司。 在这里我想说一说我们是怎么开始接触数据库技术的,然后我们做出了哪...

2897
来自专栏互扯程序

微服务(Microservice)那点事

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

3755
来自专栏木子昭的博客

编程第一课, 获取小姐姐图片这件小事儿

随便点开一个链接: https://ws1.sinaimg.cn/large/0065oQSqly1fubd0blrbuj30ia0qp0y...

934
来自专栏Java帮帮-微信公众号-技术文章全总结

【大牛经验】Java NIO通信框架在电信领域的实践

Java NIO通信框架在电信领域的实践 1. 华为电信软件技术架构演进 1.1. 电信软件 从广义上看电信软件的范围非常广,细分实际可以分为两大类:系统软件和...

74510
来自专栏java一日一条

前谷歌高级Java架构师分享工作8年经验(如何成为一名架构师)

很多工作一定年限的程序员感觉自己到了瓶颈不知道怎么去突破,其实这个时候就要冲破传说中的架构师。

2051
来自专栏一个会写诗的程序员的博客

第12章 Spring Boot与微服务第12章 Spring Boot与微服务12.1 微服务架构12.2 Spring Cloud构建微服务架构

随着RESTful web服务和JSON数据交换格式流行,简单快速建立一个可连接的服务已经越来越方便了。随着持续交付概念推广以及Docker容器普及,微服务将这...

1412

扫码关注云+社区

领取腾讯云代金券