哈德森CI - 功能或单元测试案例?

时间:2011-06-14 20:04:19

标签: unit-testing hudson qa jenkins

我让Hudson每隔5分钟轮询一次项目并启动编译检查。 这些包括用于java项目的ant构建,并部署到数据库代码的参考数据库,系统运行良好。

现在我处于十字路口。 我已经编写了一套广泛的功能测试用例,它们可以运行许多组件。 功能性我的意思是这些基本上模仿了我们的手动QA部门会做的事情。如果你愿意,黑盒测试。它们是JUnit测试用例,但绝对不是单元测试用例。 我想知道这类测试是否适合5分钟的轮询,或者我应该使用更多的白盒型单元测试用例。 也许功能套件应该是每晚构建的一部分?

任何意见赞赏 彼得

4 个答案:

答案 0 :(得分:6)

一般情况下,您希望尽快运行测试,以便开发人员尽可能快速地获得反馈 - 否则他们将不知道他们是否会在很久以前将其丢失,当他们可能已经转移到一段不同的代码。如果您的功能测试将耗费所有系统资源几个小时,那么我建议仅将其作为夜间测试的一部分,但除此之外,我建议同时运行您的功能和单元测试用例与每一个构建。这两组测试都提供了有价值的反馈,在你运行它们之前,你真的不知道你的系统是否稳定。

但这并不意味着您必须让两个项目都进行轮询。我们所做的就是把它分成几个不同的Hudson / Jenkins工作:

  • 一份工作调查SCM,编译和部署项目(相当快,几分钟)
  • 当该工作完成后,它会自动启动第二个完成大部分功能测试的工作(5-20​​分钟,具体取决于项目)
  • 第三份工作每晚都会运行,并且通过需要很长时间运行或占用大量资源的测试进行更广泛的测试(需要几个小时)

这意味着它可以在第一个构建完成所有测试之前开始构建第二个构建,但是仍然会为每个构建运行大部分测试。

答案 1 :(得分:0)

我认为您的决定实际上取决于功能测试的含义。如果您的功能测试实际上是验收测试(测试执行客户在系统验收测试中会做的事情),那么我认为如果可能的话,您应该让它们在每个构建中运行。

然而,如果测试是集成测试,我真的认为你应该考虑将这些测试重写为unittest(随着时间的推移)是否更有价值。关于这个主题我最喜欢的读物是Integrated Tests Are A Scam

除此之外,我做了第二次@ Laepdjek的回答。

答案 2 :(得分:0)

这些测试通常是否很脆弱,或者它们是否相当稳定?

如果它们稳定,我会说它们是5分钟编译测试完成时运行的第二个Hudson作业的一部分。假设您的服务器没有资源,那么您真的没有任何损失。

您需要确保在构建失败时通知合适的人员,并在发出警报之前手动验证失败。

答案 3 :(得分:0)

我们在之前的工作场所做了什么:Hudson中的构建Ant任务包括单元测试,因此如果任何单元测试用例失败,构建任务就会破坏。接下来是软件包安装脚本到功能测试服务器上,然后是功能测试用例。对于桌面应用程序,Squish测试用例在每晚构建之后运行。我们的EE应用程序是真正的CI,我们还通过Ant任务部署了Cucumber / Selenium测试用例。

规则很简单:在您自己的计算机上运行每个Ant任务,并且只有在每个测试用例为绿色时才提交代码更改。

在另一家公司,我看到了以下政策:如果你打破Hudson构建工作并且你在一小时内没有纠正它,你的提交就会被恢复。