对于来自黄瓜背景的TestNG,我很陌生。 在我当前的项目中,jenkins作业配置了Maven和TestNG,使用java和Selenium进行脚本编写。
任何工作,比如30次测试,如果需要2小时才能完成,当由于某种原因在最后一分钟突然终止时,我没有得到任何成功运行的测试结果。因此被迫再次运行整个工作。 我看到的只是错误堆栈跟踪,结果如下:
Results :Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
我确信有更好的方法来设计,希望有更好的方法。
答案 0 :(得分:2)
如何确保我没有丢失成功运行的测试结果(虽然通过/失败)?
通常有两种方法可以在TestNG驱动的测试中构建报告。
org.testng.IReporter
接口的监听器,并在其generateReport()
内,将测试结果合并到报告中的所有逻辑都被执行。org.testng.IInvokedMethodListener
然后在其afterInvocation()
内执行以下操作:
org.testng.IInvokedMethod
的类型(以查看其配置方法(或)@Test
方法)并以不同方式处理这些类型的方法(如果报告需要单独显示) 。然后测试org.testng.ITestResult
的状态,并根据状态将其显示为PASS/FAIL/SKIPPED
IReporter
实现在最后运行(这就是为什么我将它们称为批处理模式)。因此,如果某些事情在结束时崩溃但在执行报告阶段之前,则会丢失所有执行数据。
因此,您可能希望尝试构建实时报告模型。您可以查看SeLion使用的RuntimeReporter报告。它建立在实时模型上。
是测试管理工具还是某个实体来存储运行时结果,强制要求或TestNG内置了一些规定?
TestNG没有强制要求。正如我上面解释的那样,这一切都归结为您如何构建报告。如果您以实时方式构建报告(可以利用模板引擎,如Velocity / Freemarker / Thymeleaf)来构建报告模板,然后使用IInvokedMethodListener
将值注入模板,以便它可以很容易渲染。
阅读更多here以便对模板引擎进行比较,以便您可以选择适合您需求的内容。