写点什么

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:5215406

评论

发布
暂无评论
  • app 自动化测试 webview 怎么操作

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

    2022-08-10

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

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

    2022-10-14

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

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

    2022-09-28

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

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

    2021-08-13

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

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

    2021-08-11

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

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

    2022-07-22

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

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

    2022-03-16

  • 32|测试(一):开发到重构中的测试

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

    2022-12-01

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

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

    2022-07-27

  • 怎么学自动化测试

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

    2022-08-10

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

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

    2022-09-04

  • IntelliJ IDEA 的 Code Coverage 测试

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

    2023-02-08

  • 搞测试是件费脑子的事

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

    2021-07-06

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

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

    2023-02-09

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

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

    2021-12-10

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

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

    2022-09-01

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

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

    2022-01-05

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

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

    2022-10-20

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

    在线正则表达式大全测试

    2022-03-29

发现更多内容

AOP 插件就这?上手不用两分钟!!

4ye

Java spring 程序员 后端 签约计划第二季

spring-boot-devtools 快速重启的秘密

4ye

Java spring 程序员 后端 签约计划第二季

企业决策智能项目的五种失败姿势

脑极体

29 K8S之ReplicaSet控制器

穿过生命散发芬芳

k8s 11月日更

架构营模块五作业

GTiger

一文读懂敏捷开发的发布策略

华为云开发者联盟

DevOps 运维 敏捷 开发 发布策略

微信程序开发系列教程(一)开发环境搭建

汪子熙

JavaScript node.js 微信 11月日更 微信开发

面试官:说一下final关键字和final的4种用法?

王磊

激发数字新活力 打造发展新优势

CECBC

在线文本并集计算工具

入门小站

工具

架构训练营 - 模块五

Geek_9de3de

架构实战营

Spring AOP内功修炼

4ye

Java spring 程序员 后端 签约计划第二季

[Pulsar] 消息的消费

Zike Yang

Apache Pulsar 11月日更

Python Qt GUI设计:QClipboard剪贴数据类(基础篇—19)

不脱发的程序猿

Python PyQt GUI设计 QClipboard 剪贴板

12.04 Serverless Meetup 深圳站 | Call 你来参加

阿里巴巴云原生

阿里云 Serverless 云原生 活动

使用JDK自带的VisualVM进行Java程序的性能分析

汪子熙

Java jdk 性能 性能调试 11月日更

【死磕Java并发】-----J.U.C之深入分析CAS

chenssy

11月日更 死磕 Java 死磕 Java 并发

如何用JavaScript实现2+2=5?

汪子熙

JavaScript 大前端 语音识别 语音合成 11月日更

从1天到10分钟的超越,华为云DRS在背后做了这些

华为云开发者联盟

数据库 数据 报表 华为云DRS 在线交易

微博系统中”微博评论“的高性能高可用计算架构设计

Beyond Ryan

元宇宙是人类文明不可避免的一次内卷

CECBC

DDD领域驱动设计落地实践系列:战略设计和战术设计

慕枫技术笔记

Java 后端 签约计划第二季

GitHub上星标39.9k+的开源类库,忍不住分享下

沉默王二

Java

中国首批区块链订单融资缘何落地雄安?

CECBC

Rust 元宇宙 7—— 异步和消息

Miracle

rust 异步 元宇宙

架构训练营 - 模块六

Geek_9de3de

架构实战营

OpenELB 进入 CNCF Sandbox,让私有化环境对外暴露服务更简单

青云技术社区

云计算 云原生

使用ES6编写一个超简单的搜索算法

吴脑的键客

JavaScript 大前端

面试官:final、finally、finalize 有什么区别?

王磊

java面试

面试官:int和Integer有什么区别?为什么要有包装类?

王磊

Python量化数据仓库搭建系列3:数据落库代码封装

恒生LIGHT云社区

量化投资 量化交易 量化

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