c++ - Jenkins C++ 测试接线

标签 c++ jenkins googletest

我想使用 Jenkins 在 C++ 上运行谷歌测试。

目前,我正在经历分为两个工作的 4 个阶段

  1. 工作 A,构建
    • a) 代码构建(在我的例子中生成库)
    • b) 测试构建(与上述库的链接)
  2. 工作 B,测试 由 A 稳定完成触发
    • a) 测试执行
    • b) 报告生成(通过 JUnit 插件)

我正在通过“Execute Shell”执行测试,它会生成一个 XML 报告并提供给 Report Generation
我觉得我的线路搞砸了,因为

  • 失败的测试构建 (1b) 会将代码构建标记为失败,
  • 将测试作为构建步骤 (2a) 执行感觉就像一个 hack。

是否有一种干净的方法来为谷歌测试构建-运行-报告与代码构建分开?

最佳答案

我们的项目结构如下:

在makefile中,我们有等同于

all: ${PROGRAMS} ${TEST_PROGRAMS}

run: all coverage

check: ${TEST_PROGRAMS}
        for p in $^; do ./$$p || exit 1; done

coverage: check
        lcov ...

在开发人员机器上,我们只是“make run”,它会构建、测试和计算覆盖率。

在 Hudson(唉,我们继承了它,但我无法说服所有人改用 Jenkins),我们有三项工作:

  • 构建:运行“make all”来构建所有可执行文件和测试程序。如果成功,触发“测试”
  • test:运行“make check”来执行所有测试程序。如果成功,触发“覆盖”
  • cover:运行“make coverage -o check”以生成覆盖率信息(无需再次运行测试)。

我们针对早期故障构建了这样的结构:构建由 checkin 触发并且可以非常快,而运行测试套件需要固定(且相当长)的时间。此外,如果代码未构建,则尝试运行它毫无意义 :)

在我看来,未能构建测试程序应该导致代码构建失败,因为它可能表明库存在问题,不一定是测试程序存在问题。如果您想查看库和测试的单独状态,您可以创建单独的作业。

Hudson 没有“测试”的概念。运行测试程序与运行“make”没有区别(如果您从 makefile 运行测试,则与运行编译器和链接器没有区别)。

关于c++ - Jenkins C++ 测试接线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27122126/

相关文章:

c++ - 转发复制构造函数的问题

c++ - C++中如何判断arg类型

tdd - 如何在Google测试中为多个测试初始化​​常量字符串?

c++ - 如何向下遍历四叉树以获得最底层的节点(3D、C++、DX11)

c++ - 在蛇游戏中打印障碍物时如何解决边框问题?

linux - 如何通过在 Jenkins 中使用 bash 脚本读取 pid 文件来终止进程?

windows - 如何运行 Windows 命令并每次都返回 true?

jenkins - Chef : Jenkins supermarket cookbook automated job deployment

c++ - google test 如何制作测试序列

c++ - 区分选定单元格和编辑单元格