c ++与性能指标的持续集成

时间:2008-12-21 02:57:43

标签: c++ unit-testing continuous-integration automated-tests cruisecontrol

我想为我的开源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。

7 个答案:

答案 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)

我们使用NAntCruise Control.NETbjamCppUnit的组合,这一切都很有效。

然而,直到最近我们才从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可以通过两种方式处理性能指标:

  1. 如果您有xml数据,可以将其合并到日志文件中,然后将其集成到包含.xsl或
  2. 的电子邮件和网页中
  3. 如果您有html报告,则可以使用工件发布者使用artifact publisher从网络界面中将其提供。
  4. 我对这个主题有点偏颇,因为我在CruiseControl项目上工作,但还有其他一些CI工具可以运行。

答案 6 :(得分:0)

我们使用UnitTest ++和Hudson。

我发现Hudson非常易于使用且配置非常多,插件很多。