如何使 TestNG 打印有关失败的详细消息?

TestNG 支持很多断言。它具有扩展 Java 对象类java.lang.object的org.testng.Assert类。

每当出现故障时,用户都希望获得详细的故障报告,以便执行根本原因分析。但是,有时显示的故障信息不充分,有时会向用户提供每次重复的相同类型的故障信息。这些类型的问题可以在 TestNG 中使用关键字verbose ="<int>"来处理。

TestNG 支持详细信息,并允许用户根据他们希望看到的故障信息的程度传递一个值。它支持从 -1 到 10 的值。

  • 默认情况下,它的值设置为“ 0 ”,这将显示关于失败的最少可能信息。

  • “-1”是调试模式。

  • 当详细设置为"10"时,它将显示有关测试、方法、侦听器等的所有相关统计信息。

在本文中,我们将比较 TestNG 中 verbose 为 0 和 10 时的两个列表。

方案 1

在这种情况下,我们将保持 verbose=0 并观察输出。

解决此问题的方法/算法 -

  • 第 1 步- 创建一个名为NewTestngClass的 TestNG 类。

  • 第 2 步- 在类中编写 @Test 方法,如下所示。

  • 第 3 步- 现在创建testNG.xmlfor verbose=0以运行 TestNG 类。

  • 第 4 步-testNG.xml直接在 IDE 中运行或运行 testNG 类,或使用命令行编译并运行它。

示例

对常见的 TestNG 类“ NewTestngClass ”使用以下代码-

src/NewTestngClass.java

import org.testng.Assert;

import org.testng.annotations.*;

public class NewTestngClass {

   @Test

   public void testOne() {

      int Id = 1;

      int newId = 2 ;

      Assert.assertEquals(Id, newId);

   }

}

测试NG.xml

这是一个配置文件,用于组织和运行 TestNG 测试用例。当需要执行有限的测试而不是完整的套件时,它非常方便。

<?xml version = "1.0" encoding = "UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1" verbose="0">

   <test name = "test1">

      <classes>

         <class name = "NewTestngClass"/>

      </classes>

   </test>

</suite>

输出结果
java.lang.AssertionError: expected [2] but found [1]

Expected :2

Actual :1

at org.testng.Assert.fail(Assert.java:99)

at org.testng.Assert.failNotEquals(Assert.java:1037)

at org.testng.Assert.assertEqualsImpl(Assert.java:140)

at org.testng.Assert.assertEquals(Assert.java:122)

at org.testng.Assert.assertEquals(Assert.java:907)

at org.testng.Assert.assertEquals(Assert.java:917)

at NewTestngClass.testOne(NewTestngClass.java:12)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)

at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598)

at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173)

at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)

at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824)

at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146)

at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)

at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)

at java.util.ArrayList.forEach(ArrayList.java:1259)

at org.testng.TestRunner.privateRun(TestRunner.java:794)

at org.testng.TestRunner.run(TestRunner.java:596)

at org.testng.SuiteRunner.runTest(SuiteRunner.java:377)

at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371)

at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332)

at org.testng.SuiteRunner.run(SuiteRunner.java:276)

at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)

at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)

at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212)

at org.testng.TestNG.runSuitesLocally(TestNG.java:1134)

at org.testng.TestNG.runSuites(TestNG.java:1063)

at org.testng.TestNG.run(TestNG.java:1031)

at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)

at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)

方案 2

在这种情况下,我们将保持 verbose=10 并观察输出。

解决此问题的方法/算法 -

  • 第 1 步- 创建一个名为NewTestngClass的 TestNG 类。

  • 第 2 步- 在类中编写 @Test 方法。

  • 第 3 步- 现在创建testNG.xmlfor verbose=10以运行 TestNG 类。

  • 第 4 步-testNG.xml直接在 IDE 中运行或运行 testNG 类,或使用命令行编译并运行它。

示例

将以下代码用于常见的 TestNG 类“ NewTestngClass ”

src/NewTestngClass.java

import org.testng.Assert;

import org.testng.annotations.*;

public class NewTestngClass {

   @Test

   public void testOne() {

      int Id = 1;

      int newId = 2 ;

      Assert.assertEquals(Id, newId);

   }

}

testng.xml

这是一个配置文件,用于组织和运行 TestNG 测试用例。当需要执行有限的测试而不是完整的套件时,它非常方便。

<?xml version = "1.0" encoding = "UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1" verbose="10">

   <test name = "test1">

      <classes>

         <class name = "NewTestngClass"/>

      </classes>

   </test>

</suite>

输出结果
...

... TestNG 7.4.0 by Cédric Beust (cedric@beust.com)

...

java.lang.AssertionError: expected [2] but found [1]

Expected :2

Actual :1

<Click to see difference>

at org.testng.Assert.fail(Assert.java:99)

at org.testng.Assert.failNotEquals(Assert.java:1037)

at org.testng.Assert.assertEqualsImpl(Assert.java:140)

at org.testng.Assert.assertEquals(Assert.java:122)

at org.testng.Assert.assertEquals(Assert.java:907)

at org.testng.Assert.assertEquals(Assert.java:917)

at NewTestngClass.testOne(NewTestngClass.java:12)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)

at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598)

at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173)

at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)

at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824)

at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146)

at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)

at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)

at java.util.ArrayList.forEach(ArrayList.java:1259)

at org.testng.TestRunner.privateRun(TestRunner.java:794)

at org.testng.TestRunner.run(TestRunner.java:596)

at org.testng.SuiteRunner.runTest(SuiteRunner.java:377)

at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371)

at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332)

at org.testng.SuiteRunner.run(SuiteRunner.java:276)

at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)

at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)

at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212)

at org.testng.TestNG.runSuitesLocally(TestNG.java:1134)

at org.testng.TestNG.runSuites(TestNG.java:1063)

at org.testng.TestNG.run(TestNG.java:1031)

at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)

at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)

===== Invoked methods

NewTestngClass.testOne()[pri:0, instance:NewTestngClass@35fb3008]

=====

FAILED: testOne

java.lang.AssertionError: expected [2] but found [1]

at org.testng.Assert.fail(Assert.java:99)

at org.testng.Assert.failNotEquals(Assert.java:1037)

at org.testng.Assert.assertEqualsImpl(Assert.java:140)

at org.testng.Assert.assertEquals(Assert.java:122)

at org.testng.Assert.assertEquals(Assert.java:907)

at org.testng.Assert.assertEquals(Assert.java:917)

at NewTestngClass.testOne(NewTestngClass.java:12)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)

at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598)

at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173)

at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)

at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824)

at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146)

at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)

at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)

at java.util.ArrayList.forEach(ArrayList.java:1259)

at org.testng.TestRunner.privateRun(TestRunner.java:794)

at org.testng.TestRunner.run(TestRunner.java:596)

at org.testng.SuiteRunner.runTest(SuiteRunner.java:377)

at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371)

at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332)

at org.testng.SuiteRunner.run(SuiteRunner.java:276)

at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)

at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)

at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212)

at org.testng.TestNG.runSuitesLocally(TestNG.java:1134)

at org.testng.TestNG.runSuites(TestNG.java:1063)

at org.testng.TestNG.run(TestNG.java:1031)

at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)

at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)

===============================================

test1

Tests run: 1, Failures: 1, Skips: 0

===============================================

===============================================

Suite1

Total tests run: 1, Passes: 0, Failures: 1, Skips: 0

===============================================

分析

当verbose为10时,用户可以在输出中看到,有很多细节如

  • 运行的总测试,运行的测试和状态

  • 总套件运行、套件名称和测试运行详细信息。

  • 除此之外,用户可以看到运行的 TestNG 版本。

  • 调用的方法名称和相应的测试名称以及错误。

当详细信息为 0 时,缺少上述详细信息。

以上是 如何使 TestNG 打印有关失败的详细消息? 的全部内容, 来源链接: utcz.com/z/297349.html

回到顶部