当前位置: 首页 > 面试题库 >

在Jenkins中产生CTest结果(xUnit> = 1.58)

邵俊才
2023-03-14
问题内容

似乎将CMake + CTest集成到jenkins中应该很容易。该cmakebuilder插件是非常容易配置(刚才设置的源树和构建树,完成了!)。但是我不明白如何调用CTest步骤。

根据xUnit主页,自1.58版以来,支持CTest的XML输出,请参见bug报告。

那就是我能找到的所有文档。当我在google或stackoverflow上搜索时,我只能找到非常老的文档,需要手动操作。

我想知道如何使用xUnit(1.81)设置最新的詹金斯(1.532.1)。我应该创建一个“添加构建步骤”吗?我应该创建一个“构建后动作”吗?我需要填写什么才能使CTest运行并生成适当的XML文件,以便jenkins可以集成它们?


问题答案:

这是一个小示例,演示了如何让xUnit选择CTest生成的XML测试结果文件。该示例包含一个C ++源文件main.cpp

#include <cstdlib>
int main() {
    std::exit(-1);
}

和伴随CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(JenkinsExample)
enable_testing()
add_executable(main main.cpp)
add_test(test1 main)
add_test(test2 main)
set_tests_properties(test2 PROPERTIES WILL_FAIL ON)

CMake列表文件生成一个可执行文件,main并通过两个CMake测试运行该可执行文件,其中出于演示目的,一个将始终失败,而另一个将始终成功。

使用Jenkins,设置一个新作业并添加一个新的cmakebuilder构建步骤。将CMake源目录指向包含本地计算机上的示例项目的文件夹。CMake构建目录应设置为build。这将使Jenkins在作业的工作空间目录中创建CMake构建文件夹。设置Clean Build标志以使作业始终从干净状态开始是个好主意。

然后,假设您正在运行Unix,请添加一个Execute shell作业步骤并在Command框中输入以下shell脚本:

cd build
/usr/local/bin/ctest --no-compress-output -T Test || /usr/bin/true

运行ctest该选项-T Test将使CTest
Testing在build文件夹内的子文件夹中生成XML输出文件,然后xUnit插件可以在构建后的操作中将其提取。|| /usr/bin/true如果某些测试失败,则必须使用来防止Jenkins提前中止构建(不运行xUnit插件)。

如果使用的是Windows,请设置类似的Execute Windows batch command作业步骤:

cd build
"C:\Program Files (x86)\CMake 2.8\bin\ctest.exe" --no-compress-output -T Test || verify > NUL

最后xUnit,必须按以下方式配置插件:

添加Publish xUnit test result report构建后操作,然后使用插件的Add按钮创建CTest- Version测试结果报告。在CTest-Version (default) Pattern输入文件模式中build/Testing/**/Test.xml



 类似资料:
  • 问题内容: 我正在使用CTest(CMake的一部分)进行自动化测试。 如何在Jenkins仪表板中获得CTest结果?或者,换句话说,如何使CTest以类似JUnit的XML输出? 问题答案: 在Jenkins中,在CMake部分(可能是通过CMake插件完成)之后,添加以下批处理脚本,或适应Linux上的构建: 是CMake插件中的构建目录 是我所有测试所在的子目录 使CTest输出为XML(

  • 问题内容: 我正在尝试为我的Qt单元测试项目使用Jenkins xUnit插件,但是我无法使其工作… 这是我到目前为止所做的: 首先,我使用qmakebuilder插件构建我的单元测试项目(向qmakebuilder插件提供.pro),然后添加构建部分,首先在其中放置testResult xml文件,然后运行测试带有标志的二进制文件,以使其为我生成xml文件,然后将xml文件命名为: 最后,在Po

  • 问题内容: 我有一些由Bitovi用funcunit编写的测试,在最终让它们与phantomjs一起工作之后,我希望在Jenkins的工作中实现自动化。 这实际上已经可以使用,但是我需要一种可视化我的结果的方法,所以我读到Jenkins的XUnit插件应该可以实现,但是我设置它的测试模式类型无关紧要,要么说它是空的或它不是有效的xml。 在下面,您将找到我为运行测试套件而执行的命令以及xml文件中

  • 我有一个用户表和一个高尔夫比赛分数表。当用户参加比赛时,他使用表格在结果表中记录分数。我想显示一个结果表,显示用户的完整列表和比赛的分数。表中有八列分数——每门课一列。我正在努力使用php代码来显示结果分数。如果一名球员已经比赛,他的得分将正确显示,但如果表中的下一名球员没有比赛,则他的得分将显示为表中高于他的球员的得分。这将在列表中继续下去,直到获得真正的分数。我试图找到答案,但没有成功。这是我

  • 我正在使用OpenNLP处理诸如“在洛杉矶工作的医生”和“住在好莱坞并在圣莫尼卡工作的女性”之类的查询。对于理解人类的英语来说,这些句子很明显,主题是“医生”和“女性”。然而,当我使用opennlp时,它将句子标记为 [女性生活][好莱坞] 这是另一个句子“住在圣莫尼卡、在马里布工作和踢足球的人”被处理为 为什么OpenNLP的POS标记器错误地标记了它们?这些句子有最简单的语法结构。如果最先进的

  • 问题内容: 当前,我有一个效率低下的同步生成器,该生成器按顺序发出许多HTTP请求并产生结果。我想使用请求并使其并行化,从而加快此生成器的速度,但我想将其保留为普通生成器(而不是PEP 525异步生成器 ),以便不需要调用它的非异步代码被修改。如何创建这样的生成器? 问题答案: ,目前几乎没有文献记录,它接受一个协程或期货的迭代,并按输入期货的完成顺序返回一个迭代的期货。 通常 ,您可以从函数内部