写点什么

Robot Framework 作者建议如何选择自动化测试框架

  • 2012-06-04
  • 本文字数:1971 字

    阅读完需:约 6 分钟

软件自动化测试,作为手工测试的替代,越来越受到关注。 Pekka Klärck ,作为 Robot Framework 的创建者和核心开发者,按照系统级别,介绍了几种不同的自动化测试方法的区别

一、记录回放的方式流行于商业工具之中,无需编程技能即可快速上手。然而这种方法相对脆弱,一旦UI 变化测试就会受到影响,分散的脚本不可重用且难以维护,而且系统在测试前必须可用(也就意味着无法使用A-TDD 方法)。因此这种方法并不适合大型自动化测试。

二、线性脚本允许使用各种语言来编写非结构化脚本,脚本直接与被测系统交互。能够快速上手,灵活性强。但是编写脚本需要编程技能,系统中一个改动会影响所有脚本,没有经过模块化或重用的大量脚本难以维护。因此这种方法适合简单任务,不适合大型自动化。

三、模块化脚本由两部分组成:驱动脚本执行测试,测试库函数完成与被测系统交互。驱动脚本编写起来非常简单,这样可以更快地建立新测试,容易维护。然而需要花时间和编程技能建立测试库,并将测试数据嵌入脚本,建立新测试就需要新的测试脚本。因此,只要拥有编程技能,这种方法还是适合大型项目,但不适合非编程人员。

四、数据驱动方法,将数据与测试脚本分离,基于模块化的测试库,一个驱动脚本可以执行多个相似测试,这样非常容易建立新测试。维护工作可以分离,测试人员负责数据,程序员负责写测试库。然而,不同类型测试仍需要新的驱动脚本,初始建立数据解析器和重用组件需要花人力。这种方法适合大型项目,只需要较少的编程技能。

五、关键字驱动,将数据与关键字结合来描述如何使用数据执行测试。这种方法具备数据驱动的优势,同时非编程人员也能建立新类型测试。所有测试由同一个框架来执行,无需不同的驱动脚本。然而初始成本很大,但是可以使用开源方案!因此非常适合大型项目。

Pekka 对以上五种方法的介绍其实也是对自动化测试发展史的介绍,同时也体现了 RobotFramework 背后的设计思想。

除了测试框架的选择,要想做好自动化测试,还要关注其他方面。

自动化测试需要关注可测性。自动化最难的部分是与被测系统交互,特别是 GUI 层。确保系统容易被测试,比如给 GUI 元素增加标识、输出易于解析的文本、提供自动化接口等。

系统一般可以分为 GUI 层以及 GUI 之下的业务层。GUI 层测试需要调用与普通用户同样的接口,但是某些 GUI 技术缺乏好的工具支持,会使测试变得脆弱,而且执行相对较慢。从业务层开始测试相对容易,执行快。但 GUI 层仍然需要被测试,以保证 GUI 正确连接到了业务层,甚至有时 GUI 层也具有业务功能。Pekka 建议考虑对业务层进行完全测试,而部分地对 GUI 层实行端到端测试。 不是所有系统都具有 GUI 层,却可能具有 API、数据库、服务器、命令行等。自动化测试框架可以调用不同驱动来进行测试。这些非 GUI 层相对容易测试,只要把测试用例看作另一个客户端而已。

那么自动化测试应该在什么阶段进行?如果开发完成后单独做自动化,这是典型的瀑布式过程,不同团队之间存在沟通障碍,反馈周期慢,产品在后期难以获得可测性,从而导致复杂和脆弱的测试方案。相反,典型敏捷式过程中,程序员和测试人员协同完成自动化。把自动化看作团队开发的一部分,可测性不再是问题,团队做技术决定时就可以考虑可测性和工具选择,程序员可以提前加入提供可测性的钩子特性。

自动化测试需要版本控制和持续集成来支持。将测试和代码放在一起,像管理代码一样管理测试脚本,那么多可用工具,SVN、GIT、Mercurial,没道理不用。持续集成是全方位自动化的关键,当测试或代码有所改动立即执行测试。如果测试运行时间比较长,也可以定期运行。使用 Jenkins Hudson Cruise Control BuildBot 吧,自己写定时脚本或 Cron Job 可以休矣。

选择商业自动化工具还是开源工具?好东西肯定贵,但是贵的不见得好,再便宜的许可证也会阻止整个团队的协作。而且商业化工具难以和其他自动化工具(特别是其他厂商的)或版本控制、持续集成进行整合和定制化。另外,产品终止或公司关门是潜在的风险。开源工具可供选择余地很大,当然也是良莠不齐。开源工具通常容易与其他工具整合,关键是免费,谁都可以随意使用和定制化,还永远不会消失。至于免费软件,越来越少了,很多自由软件都已经开源。免费软件同样不能定制化,且存在中止的风险。

做自动化需要哪些技能?一般来说,包括 Python、Ruby、Perl、JavaScript、正则表达式、XPath 和 CSS 定位、SQL 语句、版本控制等。

有了自动化,手工测试还需要吗?当然需要!! 不过,要避免手工执行脚本来测试,还是将其完全自动化吧,测试人员可以更多关注于探索性测试。 记住,机器擅长回归测试,人类善于寻找 Bug。


感谢郑柯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-06-04 05:5214985

评论

发布
暂无评论
  • 32|测试(一):开发到重构中的测试

    在很多讲TDD测试的书或文章中,通常会偏概念化,希望通过今天的学习,你能对它有更具象的了解。

    2022-12-01

  • 怎么学自动化测试

    首先,你需要有心理准备,不是说会自动化,就不用干手工测试了。 自动化测试没有办法完全取代手工测试,有些测试场景,自动化的成本要明显高于手工。

    2022-08-10

  • App 自动化测试是怎么实现 H5 测试的

    移动端 app 自动化框架很多,但是有一些框架因为不支持混合应用测试,一直没有完全流行。比较典型的是经典的 Python 框架 uiautomator2, 这个框架简单好用,没有 appium 那样复杂的 api 调用,受到不少 python 自动化工程师的青睐。

    2022-07-22

  • 自动化测试:为什么程序员做测试其实是有优势的?

    其实,程序员的主要工作就是打造各种自动化工具,无论是为了业务的支撑,或者是对于开发过程本身的支持。

    2021-08-11

  • 软件开发:如何利用可观测性进行驱动?

    这节课,我们更近距离看看可观测性驱动的软件开发,看看它如何更加有效地帮助我们分析生产环境问题,保障生产环境的服务可靠性。

    2022-09-28

  • 测试小白入门必知必会的 8 个测试工具

    工具掌握不在多,而在于能够覆盖到日常工作场景,多快好省地完成测试任务。 以上8个测试工具基本覆盖了功能测试,接口测试,自动化测试,性能测试,项目管理,测试管理,掌握好这8个基本能够胜任日常的测试工作了。

    2021-12-10

  • IntelliJ IDEA 的 Code Coverage 测试

    IntelliJ IDEA 是可以帮我们进行 Code Coverage 测试的。

    2023-02-08

  • app 自动化测试 webview 怎么操作

    移动端 app 自动化框架很多,但是有一些框架因为不支持混合应用测试,一直没有完全流行。比较典型的是经典的 Python 框架 uiautomator2, 这个框架简单好用,没有 appium 那样复杂的 api 调用,受到不少 python 自动化工程师的青睐。

    2022-08-10

  • 开篇词|为什么 TDD 是当前最具工程效能的研发流程?

    我相信,我掌握了测试驱动开发那天,我才成为了可靠、高效的职业程序员。

    2022-03-16

  • 软件测试 | 白盒测试方法

    白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测

    2023-02-09

  • 构建测试的体系化思维(基础篇)

    构建测试的体系化思维的基础篇,从测试的基本职责出发展开,介绍了相关的方法、工具和实践,适合初级测试人员。

    2022-01-05

  • 从手动测试到自动化测试(下)

    前文说道[从手动测试到自动化测试(上)](https://mp.weixin.qq.com/s/zcouE06eNEt-AVUFnFjRIg) `` 2022-10-10``,接下来分享后面的内容。

    2022-10-14

  • SpringBoot 整合 Swagger 自动生成在线 API 文档

    现在大都数项目都已是前后端分离的啦,那么接口文档就成了项目中非常重要的一部分啦,SpringBoot整合Swagger可以自动生成RESTFUL风格的API文档,也可以在其中进行测试,比起以前手写的文档,不仅方便很多,而且也易于修改和测试。

    2022-07-27

  • 一个好的自动化测试长什么样?

    之所以测试会出现这样那样的问题,一个重要的原因是这些测试不够好。

    2021-08-13

  • 搞测试是件费脑子的事

    搞测试是件费脑子的事,由于从来没接触过这个玩意,现在还是一头雾水。写测试书,写道怀疑人生,还是直接写代码来的开心快乐啊

    2021-07-06

  • 在线正则表达式大全测试

    在线正则表达式大全测试

    2022-03-29

  • 22|质量保证(上):每次上线都出 Bug?你需要 E2E 测试

    接下来两节课,我们将进入大中型React项目最重要的实践之一:自动化测试的学习。

    2022-10-20

  • 一文带你了解 K8S 容器编排(上)

    K8S目前是业界容器编排领域的事实标准,是几乎所有云原生架构的首选。目前随着云原生架构越来越流行,测试开发人员需要掌握K8S技术栈已经成为越来越迫切的需求。

    2022-09-01

  • 从改善设计的角度理解 TDD (2)

    当我们理解TDD之后我们至少会发现下面这三点: 1. TDD是一种更加自然的编程方式 2. 先写测试还要求我们站在使用者的角度来编写测试,这样可以自然的驱动出更好的设计 3. 由于TDD天然的特性,无需担心测试覆盖率不够

    2022-09-04

发现更多内容

JVM - 类加载器

insight

3月日更

OpenCV 写图像也有讲究,取经之路第 5 天

梦想橡皮擦

28天写作 3月日更

架构师训练营 4 期 第12周

引花眠

架构师训练营 4 期

产品训练营第八章作业

Arnold

uni-app跨端开发H5、小程序、IOS、Android(四):了解uni-app项目结构

黑马腾云

html5 微信小程序 uni-app android iOS Developer

新年上班第一天生产环境分布式文件系统崩了!!

冰河

高可用 分布式存储 fastdfs 可扩展 无限扩容

银行业只是开始,60个可以被区块链改变的行业

CECBC

数字技术

MongoDB中的null类型查询

Kylin

mongodb 3月日更 21天挑战 数据库查询 NoSql查询语法

Java8中的 Stream 那么彪悍,你知道它的原理是什么吗?

Java小咖秀

Java 面试 stream java8 开发

hive数据倾斜解决办法

五分钟学大数据

大数据 hive 28天写作 3月日更

(继续码字) 因果有顺序吗?是一种必要充分条件吗?

mtfelix

28天写作 bewriting 胡思乱想

Seldon使用(一):简介及入门

托内多

tensorflow kubeflow Kubernetes PyTorch seldon

Spark详细剖析

五分钟学大数据

大数据 spark 28天写作 3月日更

为何数字人民币要采用“小额匿名、大额可溯”的设计?

CECBC

数字货币

正则表达式的使用与匹配原理解析

Guanngxu

正则表达式

2021十大区块链领域即将起飞

CECBC

区块链 投资

Go Channel源码分析

非晓为骁

源码分析 channel Go 语言

FISCO BCOS 开发环境节点搭建 | 联盟链开发(一)

李大狗

区块链 联盟链 FISCO BCOS 狗哥

领域驱动设计101 - 通用语言

luojiahu

领域驱动设计 DDD

探索 Snabbdom 模块系统原理

Geek_z9ygea

JavaScript Vue Web Vue 3 Snabbdom

Vue3源码 | createApp都干了什么?

梁龙先森

源码分析 大前端 Vue3

Docker 教程(三):Docker 命令

看山

Docker

2.3 Go语言从入门到精通:数据类型

xcbeyond

3月日更 Go 语言

【LeetCode】矩阵置零Java题解

Albert

算法 LeetCode 28天写作 3月日更

架构 idea

型火🔥

架构 原则 架构之道

控制台的安装与使用 | 联盟链开发(二)

李大狗

联盟链 FISCO BCOS 狗哥

科技强国的使命召唤中,百度AI埋下三根未来“引线”

脑极体

在离开新手村后,你该如何的走出呢?打造属于你的快与慢的能力。

叶小鍵

大数据中流量分析常见分类

大数据技术指南

大数据 28天写作 3月日更

工作多年后我更明白了UT的重要性

好好学习,天天向上

Python PyAutoGUI 库

HoneyMoose

Robot Framework作者建议如何选择自动化测试框架_软件工程_申健_InfoQ精选文章