TDD测试周期技术区分测试类型?

时间:2016-10-09 13:41:54

标签: unit-testing tdd acceptance-testing end-to-end

本艺术中的新手...但到目前为止,从我的阅读中,我了解到大致有三类:单元测试,验收/集成测试(不一样)和端到端测试。

事实上,在这3个中,似乎只有单元测试才能快速运行。在开发过程中始终为整个项目运行所有单元测试似乎是完全合理的。但似乎也不能说其他类型。

因此,在我看来,您希望在每次测试运行时运行单个验收测试(或者可能是一组相关测试),同时运行整个项目的所有单元测试。

对于处于“红色”状态的最新端到端测试,鉴于这些测试甚至可能比验收测试慢,您可能不想仅间歇性地运行吗?整个端到端的收藏可能只有在你做其他事情的时候,或者在晚上或者是什么时候?

我正在使用Gradle,我知道你可以创建一个特殊的测试任务来运行,例如,在tests \ unittests目录下的所有单元测试...但是,如果我的想法是有效的,那么有一种习惯性的方法是跳过或选择特定的验收测试,而不是通过不断编辑代码 - 这可能会非常烦人?

例如,通过某种方式将特定接受或端到端测试标记为某个“类别”,或者可能通过在分层文件夹结构中安排这些测试?

1 个答案:

答案 0 :(得分:1)

我没有使用过gradle,但是在python中我经常使用你描述的两种方式:

  • 标记特定类别的功能测试(一个子集通常被标记为" smoke"测试,将在每次部署时运行)
  • 表示层次结构中的测试
    • 小/单元
    • 集成
    • 功能(烟雾通常标记为功能测试)
    • UI
    • E2E

似乎只有单元测试才能快速运行。为整个项目运行所有单元测试似乎是完全合理的,

这是目标,鼓励所有单元测试都是免费的,以便在单次提交时快速运行。此过程通常与CI构建作业一起编写,以在每次提交回购时触发。

但似乎也不能说其他类型。 这实际上取决于可接受的构建时间和项目的大小。我发现大多数项目实际上没有那么多集成,如果它们确实有过多的集成,通常是一个很好的迹象表明服务应该重新考虑。为了永远集成需要多少测试来防止难以重现的错误情况,并确保它们的检查会破坏接口的变化?根据我的经验,并不多。我最近开始使用docker-compose进行集成测试,这使得每次提交都可以非常快速地执行许多测试20-30。

docker-compose还允许提供一个干净的e2e环境,以便对其执行接受/功能测试。

根据我的经验,较高级别的测试执行频率较低,但应尽可能频繁地执行。例如,我使用API​​,300个功能测试覆盖每个端点上的每个方法。因为他们不与UI交互并且只使用HTTP,所以他们需要大约一分钟才能执行。它们在每次部署到环境时执行,并定期执行。