我是 TestNG 的新手,来自 cucumber 背景。 在我当前的项目中,jenkins 作业使用 Maven 和 TestNG 配置,使用 java 和 Selenium 编写脚本。
任何工作,比如有 30 个测试,如果需要 2 小时才能完成,当在最后一分钟由于某种原因突然终止时,我不会得到任何成功运行的测试的结果。因此被迫再次运行整个工作。 我所看到的只是错误堆栈跟踪和结果:
Results :Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
我确信有更好的设计方法,希望有更好的方法。
- 如何确保我不会丢失成功运行(尽管通过/失败)的测试结果?
- 是测试管理工具或一些实体来存储运行时结果,强制要求还是 TestNG 有一些内置的规定?
最佳答案
How can I make sure I do not lose results of the tests that did run successfully(though passed/failed)?
通常有两种方法可以将报告构建到 TestNG 驱动的测试中。
- 批处理模式——这通常是所有 TestNG 报告的构建方式。一个实现
org.testng.IReporter
接口(interface)的监听器被构建,在它的generateReport()
中,所有将测试结果整合到报告中的逻辑被执行。< - 实时模式 - 这通常通过实现 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/