写点什么

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

评论

发布
暂无评论
  • 从手动测试到自动化测试(下)

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

    2022-10-14

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

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

    2022-03-16

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

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

    2021-08-13

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

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

    2022-12-01

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

    在线正则表达式大全测试

    2022-03-29

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

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

    2023-02-09

  • IntelliJ IDEA 的 Code Coverage 测试

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

    2023-02-08

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

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

    2021-08-11

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

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

    2021-12-10

  • 搞测试是件费脑子的事

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

    2021-07-06

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

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

    2022-09-04

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

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

    2022-07-27

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

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

    2022-10-20

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

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

    2022-09-01

  • 怎么学自动化测试

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

    2022-08-10

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

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

    2022-08-10

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

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

    2022-07-22

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

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

    2022-01-05

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

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

    2022-09-28

发现更多内容

实用技术宝典:MAC地址格式转换多种实现方式

小毛驴的烂笔头

linux命令 linux运维

AI日课@20230411:Prompt的三个层次和三个“万万没想到!”

无人之路

ChatGPT

Hybrid App 选用什么前端框架更好

Onegun

flutter React Native Hybrid

MobTech 秒验|极速验证,拉新无忧

MobTech袤博科技

在线Plist文件格式转Json文件格式

JMeter CSV 参数文件的使用方法

Liam

软件测试 测试 Jmeter csv

如何调整和优化Go程序的内存管理方式?

Jack

MySQL索引数据结构入门

江南一点雨

Java MySQL

谷歌研究科学家:ChatGPT秘密武器的演进与局限

OneFlow

这样也行,在lambda表达式中优雅的处理checked exception

程序那些事

Java stream 程序那些事

走进 RocketMQ(五)高性能文件读写

白裤

Java RocketMQ 消息队列 文件读写优化

Django笔记八之model中Meta参数的使用

Hunter熊

Python django model meta

SELECT COUNT(*) 会造成全表扫描?回去等通知吧

程序员大彬

Java MySQL

架构实战营第10期模块八作业

刘博

【深入了解系统性能优化】「实战技术专题」全方面带你透彻探索服务优化技术方案(方案篇)

码界西柚

性能优化 JVM 软件开发 4月日更 编程体系

Java运算符、标识符以及进制

timerring

Java

海外 SaaS、工具、技术栈实用指南

SaaSLab

SaaS 技术栈 海外市场

🔥笔耕不辍,筑梦前行,三周年连更活动来啦!

InfoQ写作社区官方

热门活动 三周年连更

【实践篇】基于CAS的单点登录实践之路

京东科技开发者

CAS SSO 单点登录 企业号 4 月 PK 榜

CUDA编程基础与Triton模型部署实践

阿里技术

cuda 模型部署

Kubernetes 本地持久化存储方案 OpenEBS LocalPV 落地实践下——原理篇

江湖十年

后端 #Kubernetes# Go 语言

【异常解决】UnknownHostException: api.weixin.qq.com 的解决方案

No8g攻城狮

小程序 微信 Java EE

百度工程师的软件质量与测试随笔

百度Geek说

测试 软件质量 测试技术 智能测试 企业号 4 月 PK 榜

走进 RocketMQ(六)事务消息的设计

白裤

Java RocketMQ 事务消息 最终一致性

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