我有一个jenkins工作执行一些junit测试,以及一个post build步骤,如果测试失败则调用bash脚本(实际检查日志是否包含“Tests in error:”)。然后,该脚本将向skype bot发送一些文本(使用一些jenkins的环境变量)。
现在我想让机器人说出哪些测试确实失败了。 我一直在浏览插件和谷歌,但到目前为止,我没有办法告诉哪些测试失败。 有没有办法将失败的测试传递给脚本,或者在构建之后/期间设置环境变量?
答案 0 :(得分:4)
我们有一个执行单元测试的jenkins工作,并且有一个构建步骤来发布JUnit测试报告"。
这为我们提供了一个显示测试结果的页面,包括测试失败。您的脚本的一个选项是获取该页面并从中筛选出失败的测试名称(它们被隐藏在" showFailuresLink"我们的安装中的功能)。
该页面也可通过REST API访问。我玩了一点,发现了这样的请求:
http://host:7098/jenkins/job/ExecuteUnitTests/166/testReport/api/json?pretty=true&tree=suites[cases[className,name,age,status]]
给出这样的结果:
{
"suites" : [
{
"cases" : [
{
"age" : 0,
"className" : "com.e.authentication.SimpleAuthenticationInfoTest",
"name" : "testGetCredentialKeys",
"status" : "PASSED"
},
{
"age" : 0,
"className" : "com.e.authentication.SimpleAuthenticationInfoTest",
"name" : "testGetExpirationInterval",
"status" : "PASSED"
},
...
足够简单,可以解析年龄>的条目。 0或状态!=已通过。可能有一种方法可以进一步优化请求以获得您想要的内容,但我没有时间玩它。