3

我想为我的开源 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 测试框架(我知道其他问题中讨论的单元测试框架的一些比较)用于测试和Cruisecontrol用于持续集成。但我不知道 Cruisecontrol 是否允许轻松集成性能指标。

编辑:回答 Wilhelmtell,代码应该适用于 Windows 和 Linux。

4

7 回答 7

5

我写了一篇文章,可能对你有所帮助。它描述了使用 googletest 和 hudson 对 C++ 代码的持续集成,使用 gcov 作为代码覆盖率指标。 http://meekrosoft.wordpress.com/2010/06/02/continuous-code-coverage-with-gcc-googletest-and-hudson/

于 2011-06-14T08:50:08.857 回答
2

你的问题是双重的。正如您自己指出的那样,单元测试库的选择是一个问题。是的,我认为 GoogleTest 很好。我喜欢它,因为它在使用方面感觉很轻。UnitTest++ 更是如此。你选择哪一个并不重要。

我对 CruiseControl 没有任何经验,但看看您的一组要求,我可能会编写一个脚本来完成这项工作。每个要求都可以通过至少一个工具轻松完成,因此只需将工具粘合在一起即可。

除非您的报告需要 HTML、XML、LaTeX 或其他花哨的格式,否则我会使用 Bash。然后你可以只time命令,sed从 unittest 二进制输出输出等等。不过,如果您真的喜欢 Bash 并且习惯了它,那么无论如何您可能会选择 Bash 来处理更复杂的格式。例如,您可以使用占位符为报告编写 HTML 模板,然后将占位符替换为数据。

如果您的任务更复杂,例如因为您希望脚本也可以在其他平台上运行,那么我可能会使用 Ruby 或 Python。例如,在 Ruby 中,您可以使用Markaby来输出 HTML。无论哪种方式,Bash、Ruby 或 Python 都非常适合文本处理或一般任务。我认为您可以模拟一个可以立即完成工作的小脚本。

很好的是,如果您使用脚本,那么您还可以将其作为挂钩附加到几乎任何现代版本控制系统。例如,您可能会设置一个 Subversion 或 Git 挂钩,以便脚本将在任何提交时运行。

于 2008-12-21T03:38:06.323 回答
2

我今天正在使用 CruiseControl 和 UnitTest++ 来完成这项任务。

UnitTest++ 非常好,虽然我觉得有时会受到它的限制。至少比cppunit好10倍。还没试过google测试框架,下一个项目用吧。

CruiseControl 让我非常失望。邮件列表中有一些错误和问题从未得到回答。许多用于管理程序执行和日志记录的默认“功能”并不令人满意。我们必须编写自己的报告生成、我们自己的标准输出和标准错误捕获、我们自己的状态邮件。除了定期运行测试并将它们收集在中央 Web 服务器中之外,CruiseControl 剩下的东西不多了。

于 2008-12-21T13:51:20.143 回答
2

我们使用了NAntCruise Control.NETbjamCppUnit的组合,它们都运行良好。

然而,直到最近我们才从 Windows 转移到 WindowsLinux。目前只有 bjam 和 CppUnit 在两个平台上使用。

我们的 NAnt 脚本移植不会有问题;NAnt 在mono下运行良好。CC.NET 可能不那么 - 我们还没有走这条路,但没有很多文档可以让它在 mono/Apache 下运行......

我们正在考虑用Hudson替换 CC.NET ;这是一个非常有前途的系统。 巡航控制也很不错。

我们还考虑过从 CppUnit 迁移到另一个测试框架,但现在它做得很好。 GoogleTest(尤其是新的模拟库)、UnitTest++Boost Test都在研究中。

所以我知道这可能不是一个决定性的答案,但希望那里有一些对你有用的东西!

于 2008-12-21T14:15:37.613 回答
1

我更喜欢带有 cppUnit 的 CruiseControl.Net,但我对 google 测试框架没有任何经验或知识。但是,对于简单且免费的持续集成,您无法击败 CruiseControl.NET,尤其是在它支持的所有测试框架、构建系统和其他广告方面。

于 2008-12-21T04:08:15.857 回答
1

您可能还想在 CruiseControl用户邮件列表上问这个问题,看看其他人是否也在做同样的事情。

但我不知道 Cruisecontrol 是否允许轻松集成性能指标。

您可以通过两种方式使用 CruiseControl 处理性能指标:

  1. 如果您有 xml 数据,您可以将其合并到日志文件中,然后使用一些 .xsl 将其集成到电子邮件和网页中,或者
  2. 如果您有一个 html 报告,您可以使用 artifact publisher 使其可以从使用artifact publisher的 Web 界面获取。

我对这个主题有点偏见,因为我从事 CruiseControl 项目,但还有其他几个 CI 工具也可以工作。

于 2008-12-21T22:31:16.007 回答
0

我们使用 UnitTest++ 和 Hudson。

我发现 Hudson 非常易于使用且可配置性极强,具有大量插件。

于 2009-03-05T08:37:35.603 回答