应该在CI服务器上运行哪种测试?

时间:2014-10-02 15:21:19

标签: unit-testing continuous-integration

目前,我们的单元测试与应用程序代码一起提交,并在每次提交时由构建机器人作业执行。同样,计算代码覆盖率。但是,UT和覆盖范围是 - 或者可以 - 由开发人员在将新功能提交到存储库之前进行,因此CI过程似乎不会添加任何值。

您建议在CI服务器上执行哪些测试,这些测试在提交之前由开发人员 执行?

3 个答案:

答案 0 :(得分:3)

  

所以CI过程似乎没有添加任何值

没有

  • 如果开发人员在提交之前未运行测试会发生什么?
  • 如果开发人员提交的更改与其他开发人员提交的更改冲突,会发生什么?
  • 如果测试通过开发人员的计算机而不是其他计算机上会发生什么?
  • 如果其他开发者更改了测试会怎样?
  • ...

CI不是“持续测试”,而是“连续集成”。作为集成构建的一部分运行测试的需求是验证所提交的更改是否可以成功集成与已存在的更改。是否在开发人员的本地潜在非集成工作站上传递的测试并不重要。

CI服务器应执行单元测试(任何任何合理快速的自动化测试),以验证构建的当前状态。该状态可能与单个开发人员工作站上的状态不同。

它们可能是之前由开发人员运行的相同测试。但是测试运行的上下文在物理上是不同的,并且运行它们的需要在语义上是不同的。除非您按时钟周期收费,否则没有理由省略运行测试。

答案 1 :(得分:1)

大卫提出了非常好的观点。但他没有提到的一件事是,当它超越单元测试时,在连续集成的环境中进行自动化测试会更加强大。 CI过程允许您运行集成和系统级测试,这些测试在开发框上运行太昂贵。例如,您可以对持久层执行针对内存数据库运行的单元测试。但是,CI服务器可以针对生产数据库的快照运行这些相同的自动化测试。

答案 2 :(得分:1)

完全同意以前的帖子,因为单元测试主要是由开发者完成。因此,应作为CI流程的一部分执行的测试基于意见。取决于团队/项目的目标。

同样重要的是CI(服务器)为您提供单独的测试环境。因此,您的测试工作和执行可以独立运行。您的测试将在生产环境的克隆中执行。

在我的经验中,我主要使用CI服务器进行系统,集成,功能,回归测试和UAT