在Jenkins管道中创建Robot Framework output.xml的副本

在Jenkins管道中创建Robot Framework output.xml的副本,jenkins,jenkins-pipeline,robotframework,jenkins-groovy,jenkins-email-ext,Jenkins,Jenkins Pipeline,Robotframework,Jenkins Groovy,Jenkins Email Ext,我正在为运行Robot框架测试的Jenkins管道创建Groovy电子邮件模板。我打算使用Groovy的XMLSlurper来解析Jenkins创建的output.xml,以提取我需要的信息。但是,该模板还依赖于使用Robot Publisher,我现在已经意识到它会自动删除output.xml。我不希望必须归档工件并以这种方式访问它们,那么有没有一种方法可以在Robot Publisher阶段之前在Jenkins管道中创建output.xml的副本,Robot Publisher不会删除该副本

我正在为运行Robot框架测试的Jenkins管道创建Groovy电子邮件模板。我打算使用Groovy的XMLSlurper来解析Jenkins创建的output.xml,以提取我需要的信息。但是,该模板还依赖于使用Robot Publisher,我现在已经意识到它会自动删除output.xml。我不希望必须归档工件并以这种方式访问它们,那么有没有一种方法可以在Robot Publisher阶段之前在Jenkins管道中创建output.xml的副本,Robot Publisher不会删除该副本,我可以在我的电子邮件阶段解析该副本


请容忍我,因为我对Jenkins(以及stackoverflow)来说是比较新的,所以如果我排除了重要信息,请道歉,但如果有任何想法,我们将不胜感激!谢谢

我会从另一个角度来处理你的问题。首先,我不建议使用Groovy的XMLSlurper或任何其他XML解析器从Robot Framework的output.XML中提取所需的信息

您应该使用的是已经实现了所需的解析器。您可以轻松访问中描述的任何信息。您可以在这里找到所有内容、套件、测试和关键字,这些属性包括测试消息、失败消息、执行时间、测试结果等。 总之,这将是最符合未来的解析解决方案,因为该解析器将始终与框架的版本相匹配。确保使用与当前框架版本匹配的API文档

现在回到您的任务,您应该通过Robot框架的。通过实现
output_文件
listener,您可以在Robot Publisher插件移动文件之前访问output.xml(您甚至可以在此处复制)文件。一旦output.xml就绪,将自动调用
output\u文件
。该方法将获取xml文件的路径作为输入。您可以从API直接将此路径传递到
ExecutionResult
类,然后您可以通过
ResultVisitor
来“访问”结果并获取所需的信息

最后一步是将数据写入一个文件,作为电子邮件阶段的输入。请注意,默认情况下,Robot Publisher不会触及此文件,因为它不是标准输出,而是您刚刚使用Robot Framework的API创建的自定义输出

这听起来可能很多,这里有一个例子来说明这个想法。EmailInputProvider.py中的侦听器和结果访问者:

从robot.api导入ExecutionResult,ResultVisitor
类MyTestResultVisitor(ResultVisitor):
定义初始化(自):
self.test_results=dict()
def访问测试(自测试):
self.test\u结果[test.longname]=test.status
类EmailInputProvider:
ROBOT_LISTENER_API_版本=3
def输出_文件(自身,路径):
输出='EmailInput.txt'
visitor=MyTestResultVisitor()#实例化结果访问者
结果=ExecutionResult(路径)#使用robot API解析执行结果
结果:访问(访问者)#访问和顶级套件以检索所需元数据
将open(output,'w')作为f:#将检索到的数据写入文件
对于testname,生成visitor.test_results.items():
打印(f'{testname}-{result}',file=f)
#您也可以在此处复制output.xml
打印(f'Email:Input保存到{output}')#关于控制台自定义输出的日志
globals()[\uuuuu name\uuuu]=EmailInputProvider
这将给出此虚拟套件(SO2.robot)的以下结果:

控制台输出:

$ robot --listener EmailInputProvider SO2.robot
==============================================================================
SO2
==============================================================================
Test A                                                                | PASS |
------------------------------------------------------------------------------
Test B                                                                | PASS |
------------------------------------------------------------------------------
Test C                                                                | PASS |
------------------------------------------------------------------------------
Test D                                                                | PASS |
------------------------------------------------------------------------------
Test E                                                                | PASS |
------------------------------------------------------------------------------
Test F                                                                | FAIL |
AssertionError
------------------------------------------------------------------------------
SO2                                                                   | FAIL |
6 critical tests, 5 passed, 1 failed
6 tests total, 5 passed, 1 failed
==============================================================================
Email:   Input saved into EmailInput.txt
Output:  ..\output.xml
Log:     ..\log.html
Report:  ..\report.html
自定义输出文件:

SO2.Test A - PASS
SO2.Test B - PASS
SO2.Test C - PASS
SO2.Test D - PASS
SO2.Test E - PASS
SO2.Test F - FAIL

大家好,欢迎来到SO。请阅读,然后尝试通过编辑问题、关注特定问题并提供详细信息(代码、配置、错误消息、您面临的确切问题)来改进您的问题。@b如果您需要更多说明,请告诉我。
SO2.Test A - PASS
SO2.Test B - PASS
SO2.Test C - PASS
SO2.Test D - PASS
SO2.Test E - PASS
SO2.Test F - FAIL