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

标签 java maven jenkins report testng

我是 TestNG 的新手,来自 cucumber 背景。 在我当前的项目中,jenkins 作业使用 Maven 和 TestNG 配置,使用 java 和 Selenium 编写脚本。

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

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

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

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

最佳答案

How can I make sure I do not lose results of the tests that did run successfully(though passed/failed)?

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

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

IReporter 实现在所有测试运行后最后运行(这就是为什么我称它们为批处理模式)。因此,如果在接近尾声但在执行报告阶段之前发生崩溃,您将丢失所有执行数据。

因此,您可能想尝试构建一个实时报告模型。你可以看看RuntimeReporter SeLion 使用的报告。它建立在实时模型之上。

Is a test management tool or some entity to store the run time results , a mandatory requirement or TestNG has some provision built-in?

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

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

关于java - 即使运行突然终止,我们如何才能在 TestNG 中获得成功运行测试的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854843/

相关文章:

java - 无法在java中正确实现readLine

java - 了解 Java Setter 和 Getters

maven - sonar-maven-plugin 无法识别 ${session.executionRootDirectory}

在 headless 机器上使用 Jenkins 进行 Android 单元测试

jenkins - 创建拉取请求到分支时,Github 不触发作业

java - Jenkins构建SpringBoot项目失败(找不到类org.springframework.asm.ClassVisitor)

java - Autowiring 类的 Mockito 3 模拟方法

java - 使用 Spring Framework Cloud 时无法将 Artifact 从中央 Maven 存储库传输到中央 Maven 存储库

java - 插件依赖的Maven依赖管理

java - 如何向 XWPFRun 添加超链接