自动化软件测试
了解自动和手动软件测试之间的区别,并学习如何为您的团队规划自动化测试解决方案。
Max Rehkopf
特约作家
什么是自动化测试?
What is automated testing?
自动化测试是应用软件工具来自动化人工驱动的审查和验证软件产品的手动流程。现在,大多数现代敏捷和 DevOps 软件项目从一开始就包括自动化测试。但是,要充分理解自动化测试的价值,了解在自动化测试广泛采用之前生活是什么样子会有所帮助。
当手动测试成为常态时,软件公司通常会雇用全职 QA 团队。该团队将制定一组“测试计划”或分步清单,以判定软件项目的某个功能按预期运行。然后,每次向软件项目推送新的更新或变更时,QA 团队都会手动执行这些清单,然后将测试计划的结果返回给工程团队进行审查,并进一步开发以解决问题。
此过程缓慢、昂贵且容易出错。自动化测试大幅提高了团队效率和质量保证团队的投资回报率。
自动化测试将所有权责任交给了工程团队。测试计划与常规路线图功能开发一起制定,然后由软件持续集成工具自动执行。自动化测试促进了 QA 团队的精简规模,使 QA 团队能够专注于更敏感的功能。
查看解决方案
使用 Open DevOps 构建和操作软件
相关资料
DevOps 的自动化测试
Why is testing automation important to continuous delivery?
持续交付 (CD) 就是要尽快向客户交付新的代码版本。自动化测试对于实现这一目标至关重要。如果交付流程中需要手动执行耗时的步骤,则无法自动向用户交付。
CD 是更大的部署管道的一部分。CD 是持续集成 (CI) 的继任者,也依赖于持续集成。CI 完全负责针对任何新的代码变更运行自动化测试,并验证这些变更不会破坏既定功能或引入任何新错误。持续集成步骤通过自动化测试计划后,就会触发 CD。
自动化测试、CI 和 CD 之间的这种关系为高速软件团队带来了许多好处。自动化测试通过确保新提交不会引入任何错误来确保开发每个阶段的质量,因此软件始终处于部署就绪状态。
哪些类型的软件测试应该首先实现自动化?
1. 端到端测试
可以说,要实现的最有价值的测试是端到端 (E2E) 测试。E2E 测试模拟整个软件产品堆栈中的用户级体验。E2E 测试计划通常涵盖用户级别的故事,例如:“用户可以登录”、“用户可以存款”、“用户可以更改电子邮件设置”。这些测试实施起来非常有价值,因为它们可以确保真实用户即使推送了新的提交,也能获得流畅的无错误体验。
E2E 测试工具会捕获和重放用户操作,因此 E2E 测试计划随后成为关键用户体验流程的记录。如果软件产品缺乏任何类型的自动化测试范围,则通过对最关键的业务流程实施 E2E 测试,它将获得最大价值。在预先捕获和记录用户流程顺序方面,E2E 测试可能很昂贵。如果软件产品不是每天快速发布,那么让人工团队手动执行 E2E 测试计划会更实惠。
2. 单元测试
顾名思义,单元测试涵盖单个代码单元。代码单元最好用函数定义来衡量。单元测试将涵盖单个功能。单元测试将判定函数的预期输入与预期输出相匹配。具有敏感计算(可能与金融、医疗保健或航空航天有关)的代码最好由单元测试覆盖。单元测试成本低廉,实施速度快,投资回报率高。
3. 集成测试
通常,一个代码单元会对第三方服务进行外部调用。正在测试的主代码库将无法访问该第三方实用程序的代码。集成测试涉及模拟这些第三方依赖关系,并判定与它们接口的代码行为符合预期。
集成测试在编写方式和工具方面与单元测试类似。集成测试可以作为 E2E 测试的经济替代方案,但是,当单元测试和 E2E 测试的组合已经到位时,投资回报还有待商榷。
4. 性能测试
在软件开发环境中使用时,‘性能’用于描述软件项目的反应速度和响应速度。性能指标的示例包括:“页面加载时间”、“首次渲染时间”、“搜索结果响应时间”。性能测试为这些示例案例创建测量值和判定。自动化性能测试将针对这些指标运行测试用例,然后提醒团队注意降速或失速。
哪些类型的软件测试应该手动完成?
可以说,任何可以自动化的测试都应该是自动化的。这是生产力和人力成本的巨大提高。话虽如此,有时候与执行手动测试相比,开发自动化测试套件的投资回报率不值得。
1. 探索性测试
自动化测试是脚本化的,并遵循一系列步骤来验证行为。探索性测试更加随机,它会尝试使用非脚本序列来发现错误或意外行为。尽管有一些软件工具可以建立软件探索性测试套件,但它们尚未完全成熟并被广泛采用。指派一名手动 QA 测试人员并利用人类的创造力来探索如何打破软件产品,效率要高得多。
2. 视觉回归测试
当软件用户界面引入视觉设计缺陷时,就会发生视觉回归。这可能是用户界面元素错位、字体错误、颜色错误或更多。与探索性测试一样,也有一些工具可以编写自动化测试来捕捉这些回归。这些工具捕获软件产品不同状态的屏幕截图,然后使用 OCR 将其与预期结果进行比较。这些测试的开发成本很高,而且这些工具没有被广泛采用。用人眼观察某物,看看是否存在任何视觉问题,可能要有效得多。
3. 为您的 DevOps 团队构建测试自动化框架
自动化测试没有包罗万象的解决方案。在为团队规划自动化测试解决方案时,需要考虑几个关键因素。
4. 发布频率
按固定间隔(例如每月或每周)发布的软件产品可能会发现手动测试更合适。由于 CI 和 CD 依赖自动化测试,因此发布速度更快的软件产品将从自动化测试中受益。
5. 可用的工具和生态系统
每种编程语言都有自己的互补工具和实用程序生态系统。每种类型的自动化测试模式都有自己的一组工具,这些工具在特定的编程语言生态系统中可能可用,也可能不可用。成功实施自动化测试模式需要将语言和工具支持结合起来。
6. 产品市场匹配度和代码库成熟度
如果您的团队正在开发一款尚未证明目标受众或商业模式的新产品,那么投资自动化测试可能没有意义。自动化测试充当一种保险机制,以限制意外的代码回归。如果您的团队正在快速行动,那么当代码发生巨大而快速的变化时,必须更新和维护自动化测试的成本可能相当高
让自动化测试成为 CD 管道的一部分
自动化测试是一种标准的现代软件开发实践。最好的团队和公司都使用自动化测试。CI/CD 依赖于自动化测试,对于帮助最优秀的团队向客户交付可靠而强大的软件至关重要。
Atlassian 的 Open DevOps 还提供了一个开放的工具链平台,允许您使用自己喜欢的工具构建基于 CD 的开发管道。通过我们的 DevOps 测试教程了解 Atlassian 和第三方工具如何将测试集成到您的工作流程中。
分享这篇文章
下一个主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。