集成测试怎么做?

news2024/11/24 16:33:57

任何产品想要长期保持高质量运行,集成测试正是实现这一目标必不可少的工具。

本文重点介绍集成测试实现的流程,而非测试工具本身。我们的目的是聚焦于创建测试过程中你可能遇到的问题,以便你能自主地推进工作。

缺陷的成本

细节决定成败,在软件工程领域,这一点尤为真实,大多数缺陷都隐藏在细节之中。

然而,你是否思考过缺陷究竟是什么?或许你会不假思索地回答,它是应用程序中的一个错误状态,但你可能会感到惊讶,因为这个定义并不准确,实际上这是对应用程序运行不一致的定义。

确实,缺陷表现为一种与预期不一致的行为,但并非所有不一致的行为都是缺陷。两者之间的区别在于,缺陷必须是外部可观察到的。理解这一点至关重要,因为它能帮助我们避免编写无用的测试——这些测试可能会验证一个与预期不一致但并不构成缺陷的场景。

图片

明确了缺陷的定义后,你可能接下来会问自己的第二个问题是:为什么不让缺陷逃逸并让用户去反馈呢?

原因很简单,你是否有过需要重做过去已完成任务的经历?这难道不令人烦恼吗?你需要重新投入进去,努力回忆相关细节,换句话说,你的效率会降低,而这种效率的降低是有代价的。

这就是为什么缺陷发现得越晚,修复它的成本就越高的一个完美例证。在开发初期发现并修复缺陷,比起在产品发布后由用户发现再进行修复,所耗费的时间、资源和对用户信任度的影响都要小得多。因此,通过集成测试等手段提前捕捉并解决缺陷,对于控制成本、提高软件质量和用户满意度至关重要。

图片

这一成本正是我们希望在缺陷尚且廉价且容易修复的早期就发现它们的原因。

验证你是否完成了任务,而非你是否工作过。

关于测试,我最讨厌的一句话之一就是:“你测试过你的代码了吗?”大多数开发者不喜欢这句话,因为他们将测试视为一种被迫承担的任务,而我之所以不喜欢这句话,还有另一个原因:这句话从根本上就是错误的!

良好的意图有时也会导致糟糕的结果,这句话就是一个典型例子。当你对另一位开发者说这句话时,你的本意是好的,提醒他们别忘了测试,但你没有意识到的是,你也正在引导他们走向一个误区。

在进行测试时,你永远不能仅仅测试代码本身,而应该测试代码运行是否符合预期。

它并不是检验你的程序是否完全没有缺陷,而是检查测试预期与你的代码之间是否存在差距。

如果你基于代码来设计测试,那么即使你的代码没有达到项目期望,你也可能找不到任何缺陷,因为两者是匹配的!因此,正确的做法是确保测试是基于项目的实际需求和预期结果来编写的,而不是简单地验证代码逻辑本身。

那么,我们应该测试什么呢?

我们应该基于项目期望来进行测试,确保测试是围绕这些期望展开的,而绝不是在测试过程中揪住代码实现细节。

现在,你或许会对如何测试项目期望以及这些期望是什么感到困惑。这就是我想要向你介绍的——验收标准(Acceptance Criteria)的原因。

制定规范

没有什么比面对着一张白纸,完全不知道接下来该做什么更糟糕的了。而且,可以肯定的是,当你开始学习测试时,这种感觉会经常出现。

不过,我有一个好消息要告诉你,有一种方法可以减少这种迷茫感,那就是以一种特殊的方式编写规范,这种方式被称为验收标准。

验收标准是一句简单的句子,描述了应用程序中的一个原子行为,这样就便于测试,因为我们为每个场景都有了精确的指导。每个场景都会有一个精确描述它的验收标准,这让测试变得更加直接和有针对性。

图片

流程规范

与初学者常认为的不同,编写测试和代码之间存在着一定的顺序。

并非不遵循这一顺序就无法进行,但可能会使过程更加艰难且容易出错。

为此,一种既实用又流行的开发方式是测试驱动开发(Test Driven Development,TDD)。

然而,这种实践也有些教条化,作为初学者,在各种规则间很容易迷失方向。

因此,对初学者而言,回归基础,确保理解这一过程是非常重要的。

这是最重要的,一开始没有采用完美的流程并不可耻,罗马非一日建成,你的测试技能也是如此。

相反,最好专注于测试驱动开发的三个原则,并以最适合自己的方式去应用它们。

  1. 第一条原则是在编写任何代码之前先实现测试。

这样做的目的是确保你不是在测试代码本身,而是基于验收标准来设计测试。

  1. 第二条原则是,在编写任何代码之前,确保测试失败。

在小型项目中,这可能没有太多意义,但随着项目规模的扩大,很难追踪某个问题是否已被其他部分解决。这个检查是为了确保之前没有完成相同的工作,实施这段代码将为公司带来实际效益。

  1. 最后一条原则是,一旦完成代码编写,所有测试都应通过。

确保所有测试都能通过,有助于我们跟踪应用程序中重要的内容,并确保在将来重构或添加新功能时不会破坏任何现有功能。

图片

AAA框架

为了实现一个场景,我们有描述每个场景的验收标准,但如何从一句描述转换成实际代码呢?

第一步是确保验收标准是完整的,为此我们需要了解测试的三个组成部分。

1. 我们要安排应用程序的状态,确保每次运行时都有验收标准中明确规定的特定状态。这里的目的是每次运行测试时都拥有完全相同的状态,确保我们能够复现它。

2. 接下来的步骤是执行我们想要测试的逻辑。

3. 最后一步是断言新的状态是我们预期的,否则就让测试失败。

图片

如你所猜测的那样,如果了解AAA框架,就会发现每个步骤都遵循了该框架的一个步骤,并且为了明确定义验收标准,它也需要遵循这三步。

快速识别并不总是简单,因此设计了一种称为Gherkin的伪代码语言来解决这个问题。

在这个语言中,每个验收标准至少应包含以下每个关键词一次:

  • Given:这个关键词与设置步骤相关联,用于定义初始状态。

  • When:这个关键词用于定义需要执行的逻辑。

  • Then:这个关键词与断言步骤相关联,确保测试在验证最终状态是否符合预期。

最后总结下

测试是复杂的,但是通过遵循一些原则并妥善划分步骤,可以实现有效的测试。

首先,不能为了测试代码而测试,应该关注代码预期。

然后,遵循测试驱动开发的三条规则,确保你为公司编写了真正有效的代码,并且可以跟踪应用程序中哪些内容是重要的。

最后,为了编写每个场景,你需要遵循AAA框架,确保没有遗漏(Arrange)、(Act)和(Assert)这三个步骤中的任何一个。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑神话孙悟空:超燃视频混剪制作

黑神话孙悟空,这个名字如今在游戏界乃至整个网络世界都如同一颗璀璨的超新星,光芒万丈。 它的热度持续飙升,只要与这个话题相关联,仿佛就拥有了吸引大量关注的魔力。 对于那些不太懂自媒体运营的小伙伴来说,如何在这股…

回顾我的亚马逊云科技四大认证之旅:从零到认证高手的成长历程

前言 在2022年经过数个月的努力,我成功获得了三个AWS助理级认证,并在2024年初取得了最新推出的助理级认证。趁着备考时的学习内容和心得体会还历历在目,我想借此机会和大家分享一下这段不平凡的旅程。 助理级认证是什么 引用自&#xff1a…

培训第三十四天(初步了解Docker与套接字的应用)

上午 回顾 1、主从复制(高可用) 2、传统的主从复制 3、gtids事务型的主从复制 4、注意 1)server_id唯一 2)8.X版本需要get_ssl_pub_key 3)5.X不需要 4)change master to 5)stop | sta…

InternLM2_PracticalCamp_L2_task3_LMDeploy量化部署进阶实践

1 配置LMDeploy环境 1.1 InternStudio开发机创建与环境搭建 点选开发机,自拟一个开发机名称,选择Cuda12.2-conda镜像。 我们要运行参数量为7B的InternLM2.5,由InternLM2.5的码仓查询InternLM2.5-7b-chat的config.json文件可知,…

vue+echarts:echarts地图页面跳转

在setOption的平级写点击事件,给chart添加click监听 getmapChart.setOption({......})//和数据对应即可 //点击区域实现页面跳转getmapChart.on(click,function(params){// console.log(params);switch(params.name){case "xxxx":top.location.href"…

PHP之 通过ecc,sm2加密证书实现 sm2国密 加密

SM2 为非对称加密,基于 ECC。该算法已公开。由于该算法基于 ECC,故其签名速度与秘钥生成速度都快于 RSA。ECC 256 位(SM2 采用的就是 ECC 256 位的一种)安全强度比 RSA 2048 位高,但运算速度快于 RSA。 openssl_pkey_…

信息学奥赛初赛天天练-72-NOIP2016普及组-基础题3-无向图、简单无向图、自环、平行边、顶点的度、握手定理、递归

NOIP 2016 普及组 基础题3 5 以下不是存储设备的是( ) A 光盘 B 磁盘 C 固态硬盘 D 鼠标 6 如果开始时计算机处于小写输入状态,现在有一只小老鼠反复按照 CapsLock、 字母键 A、字母键 S、字母键 D、字母键 F 的顺序循环按键,即 CapsLock、A、S、D、F、…

10秒记住C语言运算优先级

C语言中有10类运算符号:算术运算符、关系运算符、逻辑运算符、位操作运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、求字节数运算符和特殊运算符 你是否正在为记住C语言运算优先级而烦恼? C语言中每种同类运算符都有内部的运算符优先级&…

iOS18 Beta7 最终测试版推送:苹果的又一次技术飞跃

苹果公司以其一贯的创新精神和对完美的追求,再次引领了科技界的新潮流。今天,我们聚焦于苹果最新推送的iOS18 Beta7最终测试版,这一版本不仅是苹果软件更新的里程碑,更是用户体验的一次重大升级。 最终测试版的亮相 在众多果粉的…

《黑神话.悟空》与人工智能AI重塑经典与探索未来的交织

"近期我偶然邂逅了一个极为出色的人工智能学习平台,它不仅内容深入浅出,讲解方式还风趣幽默,让人学习起来既轻松又高效。如此宝藏资源,我迫不及待想要与各位共享。即刻点击让我们一起进入这个精彩纷呈的学习网站吧&#xff0…

2024年最顶尖的9大企业薪酬绩效管理系统

国内外主流的绩效管理系统软件有:Moka;2. BambooHR;3. 飞书绩效;4. 北森;5. Peoplebox;6. Tita绩效宝;7. 泛微人事管理;8. Trakstar Perform;9. 红海eHR。 在现代企业环境…

养宠人崩溃瞬间——猫毛满天飞,换毛季宠物掉毛该如何清理?

我家猫最近换毛季,每天随便都能用梳子梳下来几个大饼,只要它所到之处猫毛满天飞,根本扫不完。衣柜里的衣服也不能幸免,深色衣服已经被猫毛占据,直接变了一种颜色。想当初它来家里的时候是冬天,我还惊讶这只…

使用Obsidian实现Anki快速制卡

文章目录 前言准备双双启用遇到问题查看是什么问题解决问题 开始使用使用前的一些设置快速制卡 前言 我现在使用 Anki 的同时也使用 Obsidian,正好可以通过插件来让这两个十分好用的软件实现联动。 在 Obsidian 中实现 Anki 的快速制卡。 准备 首先要在这两个软…

Cocos Creator通用关卡编辑器UniLevelEditor

这是一款通用的关卡编辑器,可以帮助你快速制作不同类型游戏的关卡内容。不需要每个游戏都特别制作对应的关卡编辑器了。 注:该商品为Cocos项目源码,不是插件,开发语言为TypeScript。 目前仅支持在Cocos Creator 2.x中运行该项目&a…

Voilà的安装与介绍

‌Voil‌是一个工具,能够将Jupyter Notebooks转换成交互式网页,允许代码单元运行、ipywidgets交互,并且方便分享。Voil的主要功能包括: -‌ 转换notebook‌:Voil可以将Jupyter notebook转换成一个静态的网页,包括代码单元、Markdown单元、输出结果以及交互式组件,同时保…

中国红树林动态分布数据(1990-2020年)

红树林位于热带和亚热带地区的沿海过渡地带,具有重要的生态功能和社会经济价值。同时红树林是热带、亚热带海岸带海陆交错区生产能力最高的海洋生态系统之一,在净化海水、防风消浪、维持生物多样性、固碳储碳等方面发挥着极为重要的作用。 该数据集利用了…

2024年高教社杯数学建模国赛E题思路解析+代码+论文

2024年高教社杯全国大学生数学建模竞赛(以下简称国赛)将于9月5日晚6时正式开始。 下文包含:2024国赛思路解析​、国赛参赛时间及规则信息说明、好用的数模技巧及如何备战数学建模竞赛 C君将会第一时间发布选题建议、所有题目的思路解析、相…

网络通信tcp

管道通信与数据复制管道通信确实涉及数据复制的过程,这是由于管道的工作原理所决定的。下面详细解释一下:管道通信的数据复制 1. 写入管道:•当一个进程通过 write() 系统调用向管道写入数据时,数据实际上是从进程的用户空间复制…

【blender】一个汉堡包

第一次建模,哈哈汉堡包样式大差不差。至于这么做的,那么多快捷键完蛋,忘得差不多了! 官网地址:https://www.blender.org/download/ 我下载的是4.2版本

大众点评2024年6月全国全分类店铺基础信息数据库

大众点评的采集在2023年之前还是比较好采集的,很多接口不需要登录,即使登录一个帐号也可以采集很多,所以大约2023年8月以前的大众点评店铺字段非常丰富,几乎所有常见店铺字段都能采集。 2023年8月以后,大量接口权限变…