我想使用 Jenkins 在 C++ 上运行谷歌测试。
目前,我正在经历分为两个工作的 4 个阶段
- 工作 A,构建
- a) 代码构建(在我的例子中生成库)
- b) 测试构建(与上述库的链接)
- 工作 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/