我想为我的开源C ++项目建立一个持续集成和测试框架。所需的功能是:
1. check out the source code
2. run all the unit and other tests
3. run performance tests (these measure the software quality - for example how long does it take the system to complete the test)
4. produce a report based on 3. and 4. daily
5. archive the reports for future reference
要实现这一点,您会推荐哪个测试框架和持续集成过程?现在我倾向于使用Google Test Framework(我知道对于测试讨论的单元测试框架的一些比较in other questions)和用于持续集成的Cruisecontrol。但我不知道Cruisecontrol是否允许轻松整合性能指标。
编辑:要回答Wilhelmtell,代码应该适用于Windows和Linux。
答案 0 :(得分:5)
我写了一篇可能对你有帮助的文章。它描述了使用googletest和hudson持续集成C ++代码,使用gcov代码覆盖率指标。 http://meekrosoft.wordpress.com/2010/06/02/continuous-code-coverage-with-gcc-googletest-and-hudson/
答案 1 :(得分:2)
你的问题是双重的。正如您自己指出的那样,选择单元测试库是一个问题。是的,我认为GoogleTest很好。我喜欢它,因为它在使用方面感觉轻巧。 UnitTest ++更是如此。你挑选哪一个并不重要。
我对CruiseControl没有任何经验,但是看看你的要求我可能会编写一个脚本来完成这项工作。每个要求都可以通过至少一个工具轻松完成,因此只需将工具粘合在一起即可。
除非您的报告需要使用HTML,XML,LaTeX或其他花哨格式,否则我会使用Bash。然后你可以只用time
命令,sed
输出unittest二进制文件的输出,依此类推。不过,如果你真的喜欢Bash并且已经习惯了,你可以选择Bash来获得更复杂的格式。例如,您可以使用占位符为报表编写HTML模板,然后将占位符替换为数据。
如果您的任务更复杂,例如因为您希望脚本也在其他平台上运行,那么我可能会使用Ruby或Python。例如,在Ruby中,您可以使用Markaby输出HTML。无论哪种方式,Bash,Ruby或Python都非常适合文本处理或一般的此任务。我想你可以嘲笑一个可以在任何时间完成工作的小脚本。
有什么好处,如果你使用一个脚本,那么你也可以将它作为钩子附加到几乎任何现代版本控制系统。例如,您可以设置Subversion或Git钩子,以便脚本在任何提交时运行。
答案 2 :(得分:2)
我今天正在使用CruiseControl和UnitTest ++来完成这项任务。
UnitTest ++非常好,虽然我觉得有时会受到限制。至少它比cppunit好10倍。还没有尝试过谷歌测试框架,它将用于我的下一个项目。
我对CruiseControl非常失望。有一些错误,邮件列表上提出的问题从未得到解答。管理程序执行和日志记录的许多默认“功能”都不令人满意。我们必须编写自己的报告生成,我们自己的stdout和stderr捕获,我们自己的状态邮件程序。除了定期运行测试并将它们收集到中央Web服务器之外,CruiseControl还剩下很多。
答案 3 :(得分:2)
我们使用NAnt,Cruise Control.NET,bjam和CppUnit的组合,这一切都很有效。
然而,直到最近我们才从Windows转移到Windows 和 Linux。目前,两个平台上只使用bjam和CppUnit。
我们的NAnt脚本不会成为端口问题; NAnt在mono下运行良好。 CC.NET可能不那么 - 我们没有沿着这条路走下去,但是没有很多文档可以让它在mono / Apache下运行......
我们正在考虑用Hudson取代CC.NET;这是一个非常有前途的系统。 Cruise Control也非常好。
我们还考虑过从CppUnit迁移到另一个测试框架,但现在它正在完成工作。 GoogleTest(特别是新的模拟库),UnitTest++和Boost Test都在调查中。
所以我知道这可能不是一个确凿的答案,但希望你有一些有用的东西!
答案 4 :(得分:1)
我更喜欢CruiseControl.Net和cppUnit,但我对谷歌测试框架没有任何经验或知识。但是,为了方便和免费的连续集成,您无法击败CruiseControl.NET,尤其是它支持的所有测试框架,构建系统和其他广告。
答案 5 :(得分:1)
您可能还想在CruiseControl user mailing list上提出这个问题,看看其他人是否在做同样的事情。
但我不知道Cruisecontrol 允许轻松集成性能 指标。
使用CruiseControl可以通过两种方式处理性能指标:
我对这个主题有点偏颇,因为我在CruiseControl项目上工作,但还有其他一些CI工具可以运行。
答案 6 :(得分:0)
我们使用UnitTest ++和Hudson。
我发现Hudson非常易于使用且配置非常多,插件很多。