不同类型的测试说明

2025-05-28

不同类型的测试说明

前几天在单口会议上,我们团队的数据库管理员谈到了如何为他最近的项目运行冒烟测试。我以前听人讨论过冒烟测试,但不知为何,我一直不明白冒烟测试到底是什么。它和单元测试、集成测试、回归测试有什么区别?

我现在有点尴尬,因为我无法清楚地表达这些事物之间的区别,所以我决定做一点研究,写一篇解释说明,以便将来参考,而不是觉得自己像个无知的傻瓜。我想,既然我已经做了近五年的开发人员,并且有这个问题,那么其他人可能也和我有同样的羞于提问的感受。

在阅读了大量不同的博客文章、Stack Overflow 上的问题以及一些随机资源后,我构建了一个弗兰肯斯坦式的近似共识模型,用于描述几种不同类型的测试。在谷歌上搜索了一段时间后,我发现有三点值得思考,有助于理解不同类型的测试。

1.) 他们测试什么内容?
2.) 这些测试是什么时候编写和运行的?
3.) 测试失败会提供什么信息?

不同的人有不同的定义,一个测试套件可能包含多种类型的测试。例如,您可能运行一组测试,将集成测试和回归测试合并到一个套件中。这没关系。存在一些灰色地带,而且团队习惯于开发自己特定的、团队专用的词汇表。您不需要为每个类别都准备一个全面的套件。您应该在合理的级别进行测试:

  • 应用程序的复杂性
  • 你的应用的流量
  • 你的团队规模

如果您认为我从根本上误解了或遗漏了一些重要内容,特别是如果您从事测试工作,请在评论中告诉我!

单元测试

他们测试什么?

单元测试评估每个原子代码单元是否按预期执行。理想情况下,在规划和编写单元测试时,应该隔离无法进一步细分的功能,然后对其进行测试。

单元测试不应测试外部依赖项或交互。您绝对应该模拟 API 调用。单元测试纯粹主义者还会要求您模拟数据库调用,并仅确保代码在外部源输入正确的情况下正常运行。根据您现有的代码库或经理的偏好,这可能无法实现。如果您无法从单元测试套件中排除数据库功能,请务必注意性能并寻找潜在的优化点。我的经验是,长时间运行单元测试套件非常令人不快,并且会显著减慢开发速度。

我什么时候运行它们?

你应该在编写代码的同时编写并运行单元测试。当人们提到测试驱动开发时,他们指的是单元测试,并使用测试作为代码应完成任务的规范。

如果他们失败了会发生什么?

单元测试失败会让您知道特定代码片段出了问题。如果您将测试分解得足够深入,那么失败应该会集中到未按预期运行的具体代码片段上。

故障记录应该能帮助你快速识别和修复问题,并让你知道何时需要更新规范。它们或许也能很好地指导你何时更新代码文档。

集成测试

他们测试什么?

集成测试检查两个或多个原子代码单元之间的交互。您的应用程序由执行特定小功能的独立单元组成,每个小功能可能单独运行,但当您将它们组合在一起时就会崩溃。

集成测试还测试代码与外部依赖项(如数据库连接或第三方 API)的集成。

我什么时候运行它们?

集成测试应该是单元测试之后的下一步。

如果他们失败了会发生什么?

当集成测试失败时,它会告诉您应用程序中的两个或多个核心功能无法协同工作。这可能是您编写的两个模块在某些复杂的业务逻辑中发生冲突,或者是由于第三方 API 更改了其响应结构而导致的失败。在数据库连接失败的情况下,它可能会提醒您错误处理不当。

故障可能很容易识别,也可能需要一些手动验证和实验才能识别。难以解决的集成测试故障表明您可以改进日志记录和错误处理。

回归测试

他们测试什么?

回归测试检查一组过去有效且相对稳定的场景。

我什么时候运行它们?

您应该在集成测试通过后再运行回归测试。在现有回归测试通过之前,请勿将新功能添加到回归测试套件中。

如果他们失败了会发生什么?

回归测试失败意味着新功能破坏了一些现有功能,从而导致了回归。

失败应该让您知道哪些旧功能已损坏,并表明您需要在新功能和旧的损坏功能之间编写额外的集成测试。

回归测试失败也可能表明您无意中重新引入了过去已修复的错误。

冒烟测试

他们测试什么?

冒烟测试是一套高水平、严格控制的自动化测试,介于集成测试和回归测试之间。它们的作用是进行健全性检查,确保网站的核心功能没有被破坏。

这个术语smoke test似乎是从管道工程中沿用下来的。如果你看到管道冒烟或冒蒸汽,就说明管道漏水了,需要修理。

我什么时候运行它们?

冒烟测试应该对整个系统进行综合测试,确保核心功能保持完整。这些测试不应该面面俱到。它们代表着重要的、全局性的、无法通过的测试失败。你应该尽早并经常地运行它们,最好是每天运行,无论是在预发布环境还是生产环境中。

如果他们失败了会发生什么?

如果冒烟测试失败,则表明您的网站功能存在严重问题。在这些故障得到解决之前,您不应部署新的更改。如果这些更改在生产环境中失败,则应优先修复这些问题。

验收测试

(我也听说过这被称为 QA/BV/手动测试等。)

他们测试什么?

验收测试通常是在端到端开发完成后进行的一组手动测试。他们检查以确保所编写的功能确实符合所有初始规范或验收标准。

如果他们失败了会发生什么?

看来你在写代码时漏掉了一些功能。你需要回到开发阶段去修复这个问题。:(

如果验收测试失败,您可能需要在下次规划过程的早期就确定验收标准。

我什么时候运行它们?

由于这些是手动测试,而不是以代码形式运行的测试,因此时间安排略有不同。您和您的项目负责人应该在项目开始之前起草一套验收标准。任何在项目中发现或添加的额外范围都应反映在验收标准中。

验收测试应该在开发完成后尽快进行,以便发现任何不妥之处时可以快速回溯和迭代。单元测试或集成测试结束后立即进行验收测试是合理的,因为在进行重大更改之前,测试过程可能已经进行得太深入。

性能测试

他们测试什么?
性能测试检查产品和基础架构的稳定性、可扩展性和可用性。您可能会检查诸如每秒错误数或页面加载时间之类的指标。性能测试不一定有通过/失败的标准。此阶段更多的是收集数据并寻找改进的领域。

如果它们失败了会发生什么?
性能测试的失败方式与单元测试套件的失败方式并不完全相同。相反,您需要收集一组基准测试,并根据您期望的数字进行评估。如果性能测试失败,它可能会告诉您需要更加关注基础设施的扩展、数据库查询时间等。

我什么时候运行它们?
在主要版本发布和重构之后进行性能测试是个好主意。

负载测试

他们测试什么?
负载测试是一种专门的性能测试,专门检查产品在预定时间段内承受巨大压力时的性能。

如果测试失败了会怎样?
负载测试评估的是您对流量大幅增长的准备程度。如果测试失败,并不意味着您的网站崩溃了,而是意味着您没有做好应对病毒式传播或 DDOS 攻击的准备。对于刚起步的小型产品来说,这可能不是什么大问题,但随着用户群的扩大,失败就应该引起关注了。

我什么时候应该写它们?
负载测试不应该是你一开始就关注的重点,但随着你的产品变得越来越大、越来越成熟,你应该对新功能进行负载测试,看看它们是否会影响网站的整体性能,以及是否可以进行优化。

我再也不能说我不知道​​什么是冒烟测试了,希望你也能从中有所收获!正如我上面提到的,我不是测试员,所以如果你发现我遗漏或误解了什么,请在评论区告诉我!

:)

文章来源:https://dev.to/thejessleigh/ Different-types-of-testing-explained-1ljo
PREV
航站楼生活质量基本改善
NEXT
25 个 YouTube 频道免费学习 Web 开发