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

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

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

1. 可靠性

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

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

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

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

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

2. 重要性

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

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

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

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

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

3. 特异性

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

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

单元测试浏览器

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

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

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


推荐阅读
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 方法:1 配置数据库basediros.path.abspath(os.path.dirname(__file__))  #获取当前文件的绝对路径appFlask(__name__ ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 异常要理解Java异常处理是如何工作的,需要掌握一下三种异常类型:检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常ÿ ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 本文详细介绍了JSP的三大指令:page、include和taglib,重点探讨了静态包含与动态包含的区别及其应用场景,并解释了如何使用taglib指令引入第三方标签库。 ... [详细]
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社区 版权所有