java将TestNg报告上载到S3
我目前正在研究在测试套件执行后,基于testng xml中的参数将testng报告上载到AmazonS3的能力。考虑下面的TestNG XML:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Base Framework Unit Test Suite" verbose="1" >
<parameter name="upload-test-reports" value="true" />
<parameter name="aws-provider-type" value="profile" />
<parameter name="aws-s3-bucket" value="qa-reports" />
<parameter name="target-reports-directory" value="TestProduct/Sprint1" />
<test name="Test-base-built Unit Tests" >
<parameter name="test-run-type" value="local" />
<parameter name="name" value="Test-base-built Unit Tests" />
<parameter name="browser" value="htmlunitwithjs" />
<groups>
<run>
<include name="unittest" />
</run>
</groups>
<classes>
<class name="unittest.TestBaseBuilt_Test" />
</classes>
</test>
</suite>
给定前四个参数(upload test reports、aws provider type、aws-s3-bucket和target reports目录),Java项目将把默认测试输出目录(当前为/build/reports/tests)中的所有文件上载到s3
现在,上传部分对我来说很好。问题是,它总是上载上一次测试运行中的文件。我尝试创建一个testng侦听器,扩展TestListenerAdapter,并将上载逻辑放入onFinish方法中。那没用;它在生成当前运行的报告之前上载。我还尝试编写一个自定义testng reporter来实现IReporter,并将上载逻辑放在generateReport方法中。结果相同;它在生成当前运行的报告之前上载
那么,有没有任何testng专家知道我可以将文件上传逻辑放在哪里,以便它在testng实际生成报告文件后执行
非常感谢您的帮助
# 1 楼答案
这个问题的解决方案最终还是一个TestNG监听器。我实现了IExecutionListener,并将上载逻辑放在onExecutionFinish方法中。此方法在TestNG生成报告后运行,因此它上载了当前测试运行的报告,而不是上一个