热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

3条测试用例设计原则,实现持续集成测试

1.可靠性以任何频率运行的任何测试用例都必须可靠;也就是说,测试用例不能是片状的。考虑自动检查:在持续集成环境中,这个测试

1. 可靠性

以任何频率运行的任何测试用例都必须可靠;也就是说,测试用例不能是片状的。考虑自动检查:在持续集成环境中,这个测试用例每天可能会为单个团队运行数十或数百次。
 

如果测试只有 99% 的可靠性(每100次测试执行中有一个错误报告),并且您每天运行 200 次,那么您的团队每天将至少调查两次误报失败。将其乘以可以包含数万个测试用例的单元测试套件,数学就变得清晰了。

任何不是至少99.9%可靠的测试用例都应该删除,直到它可以超过可靠性阈值。
 

但是可靠性是什么样的呢?测试用例必须采取一切预防措施以避免假阴性或假阳性。它必须是可重复的,无需外部人工干预;它必须自行清理。

在完全自动化的系统中,人们通常没有时间,例如,每隔几次测试运行就删除SQL数据库上的表。即使是手动运行的测试用例也必须在其自身之后进行清理,因为不断变化的起始状态对测试执行者来说是一种难以管理的心理负担。

2. 重要性

例如,尝试对无法编译的代码运行单元测试是没有意义的。如果底层包的单元测试没有通过,那么运行API级别的集成测试套件就毫无意义。

始终尽可能快地运行重要的测试用例,并始终首先运行快的测试。这些几乎总是你的单元测试;典型的单元测试在几微秒内执行,并且通常可以并行运行。在我的持续集成系统中,我通常可以在大约 90 秒内处理数以万计的单元测试。

集成测试是一种跨越边界的测试,通常至少包括一个HTTP或其他机器对机器的边界。这些测试用例以毫秒为单位执行,并且比单元测试慢几个数量级。

专业测试是任何比集成测试(例如端到端自动化 UI 测试)慢得多的测试,或者需要人工干预或解释从而减慢整体结果报告速度的测试。

虽然比单元测试慢的测试当然有价值,并且在持续集成系统中绝对占有一席之地,但那个地方是在运行更快、更可靠的测试之后。

3. 特异性

一个好的测试用例应该尽可能少地单独做,以尽快产生通过/失败的结果。如果有无限的时间来执行测试运行,重叠覆盖和冗余测试就不是很重要了。

如果整个集成测试通过的预算只有五分钟,而每个集成测试用例需要10毫秒,那么只有时间运行30,000个测试用例。如果正在进行基于UI的测试,每次测试的时间接近1秒,那么只有300个测试用例的时间。

单元测试浏览器

图 2. 始终以清晰、描述性的方式命名测试用例。正如您在上面看到的,这使得诊断故障变得更加容易。

每个测试用例都应该是一个明确问题的明确答案,这些问题的组合构成了一个测试套件,该套件将对所有被测功能给出明确的答案。命名清晰的原子测试用例应该可以很容易地定位测试失败的潜在原因,并且还可以一目了然地了解哪些已测试和哪些未测试。

当测试用例清晰且具有原子性时,很容易找到覆盖重叠,从而很容易找到删除的候选对象。


推荐阅读
  • 从零开始编译Linux系统:第16章 全新起点
    本章将详细介绍如何从零开始编译一套完整的Linux系统,涵盖关键组件如glibc库的介绍及其重要性。通过本文,读者将了解从源代码构建Linux系统的全过程。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 编译过程涉及多个阶段,每个阶段都有其特定的任务和方法。本文详细介绍了编译过程的五个阶段:词法分析、语法分析、语义分析与中间代码生成、优化和目标代码生成。通过这些阶段,编译器将源代码转换为目标代码。 ... [详细]
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
  • 阿里面试题解析:分库分表后的无限扩容瓶颈与解决方案
    本文探讨了在分布式系统中,分库分表后的无限扩容问题及其解决方案。通过分析不同阶段的服务架构演变,提出了单元化作为解决数据库连接数过多的有效方法。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
  • 作为一名新手开发者,我正在尝试使用 ASP.NET 和 Vue.js 构建一个单页面应用,涉及多个复杂组件(如按钮、图表等)。希望有经验的开发者能够提供指导。 ... [详细]
  • Excel VBA自动化添加数字证书(续)
    本文继续探讨如何在Excel VBA中自动添加数字证书。上一篇文章因突发情况未能完成,本次将详细介绍证书的生成和集成方法。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 本文将详细探讨PHP中C的作用,并对比其他编程语言如Java和C的特点及其适用场景。 ... [详细]
  • 开发笔记:前端之前端初识
    开发笔记:前端之前端初识 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • C语言是计算机科学和编程领域的基石,许多初学者在学习过程中会感到困惑。本文将详细介绍C语言的基本概念、关键语法和实用示例,帮助你快速上手C语言。 ... [详细]
author-avatar
走下去就下去
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有