什么是单元测试、集成测试、烟雾测试和回归测试?它们之间有什么区别,我可以为它们使用哪些工具?

例如,我使用JUnit和NUnit进行单元测试和集成测试。有没有针对最后两种测试的工具,烟雾测试或回归测试?


当前回答

回归测试-

“回归测试针对已更改的软件重新运行以前的测试,以确保当前软件中所做的更改不会影响现有软件的功能。”

其他回答

我只是想补充一下,并给出更多的背景,说明我们为什么要进行这些级别的测试,以及它们对示例的真正意义

Mike Cohn在他的《敏捷成功》一书中提出了“测试金字塔”作为一种在项目中实现自动化测试的方法。对这个模型有多种解释。该模型解释了需要创建什么样的自动化测试,他们可以以多快的速度向被测试的应用程序提供反馈,以及由谁编写这些测试。任何项目基本上都需要3个级别的自动化测试,如下所示。

单元测试-这些测试软件应用程序的最小组件。这实际上可以是代码中的一个函数,它根据一些输入计算值。该功能是构成应用程序的硬件/软件代码库的几个其他功能的一部分。

例如,让我们以一个基于web的计算器应用程序为例。这个应用程序中需要进行单元测试的最小组件可能是一个执行加法的函数,另一个执行减法的函数等等。所有这些小函数放在一起构成了计算器应用程序。

历史上,开发人员编写这些测试,因为它们通常使用与软件应用程序相同的编程语言编写。单元测试框架如JUnit和NUnit(适用于java)、MSTest(适用于C#和.NET)和Jasmine/Mocha(适用于JavaScript)用于此目的。

单元测试的最大优点是,它们在UI下运行非常快,我们可以快速获得应用程序的反馈。这应该占自动化测试的50%以上。

API/集成测试-它们一起测试软件系统的各个组件。这些组件可能包括测试数据库、API(应用程序编程接口)、第三方工具和服务以及应用程序。

例如-在我们上面的计算器示例中,web应用程序可以使用数据库存储值,使用API进行服务器端验证,并且可以使用第三方工具/服务将结果发布到云,以使其在不同平台上可用。

历史上,开发人员或技术QA会使用各种工具(如Postman、SoapUI、JMeter和Testim等其他工具)编写这些测试。

这些测试的运行速度比UI测试快得多,因为它们仍然在引擎盖下运行,但可能比单元测试花费更多的时间,因为它必须检查系统各个独立组件之间的通信,并确保它们具有无缝集成。这应占自动化测试的30%以上。

UI测试-最后,我们进行了验证应用程序UI的测试。这些测试通常是为了测试应用程序的端到端流而编写的。

例如-在计算器应用程序中,端到端流程可以是,打开浏览器->输入计算器应用程序url->使用用户名/密码登录->打开计算器应用程序->在计算器上执行某些操作->从UI验证这些结果->注销应用程序。这可能是一个端到端的流,是UI自动化的一个很好的候选者。

历史上,技术QA或手动测试人员编写UI测试。他们使用Selenium等开源框架或Testim等UI测试平台来编写、执行和维护测试。这些测试提供了更多的视觉反馈,因为您可以通过屏幕截图、日志和测试报告看到测试的运行情况、预期结果和实际结果之间的差异。

UI测试的最大限制是,与单元级和API级测试相比,它们相对较慢。因此,它应该只占整个自动化测试的10-20%。

接下来的两种测试类型可能因项目而异,但其想法是-

烟雾测试

这可以是上述3个测试级别的组合。其想法是在每次代码检入期间运行它,并确保系统的关键功能仍按预期运行;在合并新代码更改之后。他们通常需要在5-10分钟内完成跑步,以获得更快的失败反馈

回归测试

它们通常至少每天运行一次,涵盖系统的各种功能。他们确保应用程序仍按预期工作。它们比烟雾测试更详细,涵盖了应用程序的更多场景,包括非关键场景。

单元测试:它总是由开发人员在开发完成后执行,以在他们为QA准备任何需求之前从测试方面找出问题。

集成测试:这意味着当一些数据/功能输出被驱动到一个模块到另一个模块时,测试人员必须验证模块到子模块的验证。或者在您的系统中使用使用您的系统数据进行集成的第三方工具。

烟雾测试:测试人员进行测试,以验证系统是否进行了高级测试,并试图在更改或代码生效之前找出显示阻止程序错误。

回归测试:测试人员执行回归,以验证由于系统中实施的新增强或系统中的更改而导致的现有功能。

我刚刚意识到的一个新的测试类别是金丝雀测试。金丝雀测试是一种自动的、非破坏性的测试,它在实时环境中定期运行,因此如果失败了,就会发生非常糟糕的事情。

例如:

只有在开发/测试中才可用的数据是否出现了?后台进程是否无法运行?用户可以登录吗?

软件测试技术最佳网站之一的答案:

软件测试类型–完整列表单击此处

这是一个相当长的描述,我不打算将其粘贴在这里:但它可能对想要了解所有测试技术的人有所帮助。

单元测试针对的是实现的最小部分。在Java中,这意味着您正在测试单个类。如果类依赖于其他类,则这些类是假的。

当您的测试调用多个类时,这是一个集成测试。

完整的测试套件可能需要很长时间才能运行,因此在更改之后,许多团队会运行一些快速完成的测试,以检测严重的损坏。例如,您已经将URI分解为基本资源。这些是烟雾测试。

回归测试在每个构建上运行,并允许您通过捕获所破坏的内容来有效地重构。任何类型的测试都可以是回归测试,但我发现单元测试最有助于找到故障源。