即使运行突然终止,我们怎样才能在TestNG中获得成功运行测试的结果?

时间:2017-08-24 06:54:10

标签: java maven jenkins report testng

对于来自黄瓜背景的TestNG,我很陌生。 在我当前的项目中,jenkins作业配置了Maven和TestNG,使用java和Selenium进行脚本编写。

任何工作,比如30次测试,如果需要2小时才能完成,当由于某种原因在最后一分钟突然终止时,我没有得到任何成功运行的测试结果。因此被迫再次运行整个工作。 我看到的只是错误堆栈跟踪,结果如下:

Results :Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

我确信有更好的方法来设计,希望有更好的方法。

  1. 如何确保不会丢失成功运行的测试结果(虽然通过/失败)?
  2. 是一个测试管理工具还是某个实体来存储运行时结果,强制要求还是TestNG内置了一些规定?

1 个答案:

答案 0 :(得分:2)

  

如何确保我没有丢失成功运行的测试结果(虽然通过/失败)?

通常有两种方法可以在TestNG驱动的测试中构建报告。

  1. 批处理模式 - 通常是所有TestNG报告的构建方式。构建了一个实现org.testng.IReporter接口的监听器,并在其generateReport()内,将测试结果合并到报告中的所有逻辑都被执行。
  2. 实时模式 - 通常通过实现TestNG侦听器org.testng.IInvokedMethodListener然后在其afterInvocation()内执行以下操作:
    • 检查传入org.testng.IInvokedMethod的类型(以查看其配置方法(或)@Test方法)并以不同方式处理这些类型的方法(如果报告需要单独显示) 。然后测试org.testng.ITestResult的状态,并根据状态将其显示为PASS/FAIL/SKIPPED
  3. 在所有测试运行后,

    IReporter实现在最后运行(这就是为什么我将它们称为批处理模式)。因此,如果某些事情在结束时崩溃但在执行报告阶段之前,则会丢失所有执行数据。

    因此,您可能希望尝试构建实时报告模型。您可以查看SeLion使用的RuntimeReporter报告。它建立在实时模型上。

      

    是测试管理工具还是某个实体来存储运行时结果,强制要求或TestNG内置了一些规定?

    TestNG没有强制要求。正如我上面解释的那样,这一切都归结为您如何构建报告。如果您以实时方式构建报告(可以利用模板引擎,如Velocity / Freemarker / Thymeleaf)来构建报告模板,然后使用IInvokedMethodListener将值注入模板,以便它可以很容易渲染。

    阅读更多here以便对模板引擎进行比较,以便您可以选择适合您需求的内容。