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

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

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

1. 可靠性

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

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

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

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

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

2. 重要性

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

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

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

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

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

3. 特异性

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

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

单元测试浏览器

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

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

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


推荐阅读
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
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社区 版权所有