当 @BeforeTest 方法失败时,为啥它没有在 testng-failed.xml 中列出?

Posted

技术标签:

【中文标题】当 @BeforeTest 方法失败时,为啥它没有在 testng-failed.xml 中列出?【英文标题】:When a @BeforeTest method fails, why is it not being listed in the testng-failed.xml?当 @BeforeTest 方法失败时,为什么它没有在 testng-failed.xml 中列出? 【发布时间】:2021-09-18 09:11:25 【问题描述】:

我正在使用带有 testng 6.14.3 的 maven。

这是我的代码结构:

testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="set-3" parallel="tests" thread-count="10">
    <listeners>
        <listener class-name="org.uncommons.reportng.htmlReporter" />
    </listeners>

    <test name="Customer Tests">
        <groups>
            <run>
                <include name="abc"/>
            </run>
        </groups>
        <classes>
            <class name="apps.Test1_BeforeTest_Of_Test2"></class>
            <class name="apps.Test2"></class>
        </classes>
    </test>

</suite>

Test1_BeforeTest_Of_Test2.java

public class Test1_BeforeTest_Of_Test2
@BeforeTest(groups = "abc")
    public void test1Method() throws Exception 

@AfterTest(groups="abc")
public void test1AfterMethod() throws Exception 
    

Test2.java

public class Test2
 @Test(groups = "abc")
    public void test2Method()
    

在我的跑步过程中,Test1_BeforeTest_Of_Test2 课程失败了。因此,Test2 被标记为已跳过。 但是,当我查看运行结束时生成的testng-failed.xml 时,失败的@BeforeTest 类(Test1_BeforeTest_Of_Test2)不包括/列出:

testng-failed.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite thread-count="10" name="Failed suite [set-3]" parallel="tests">
  <listeners>
    <listener class-name="org.uncommons.reportng.HTMLReporter"/>
  </listeners>
  <test name="Customer Tests(failed)">
    <groups>
      <run>
        <include name="abc"/>
      </run>
    </groups>
    <classes>
      <class name="apps.Test2">
        <methods>
          <include name="test2Method"/>
        </methods>
      </class> 
    </classes>
  </test> 
</suite>

这是预期的行为吗?还是 testng-failed.xml 中的错误/差距?

理想情况下,当我们重新运行失败的测试时,我们希望 @BeforeTest 也能运行,因为它是测试 2 的先决条件。

【问题讨论】:

【参考方案1】:

TestNG 目前似乎正在考虑在testng-failed.xml 中考虑的配置,如果它是跳过的测试方法的测试类的一部分,即配置(这可能是导致测试被跳过的原因)需要驻留在与您跳过的 TestNG 方法相同的 java 类以将其视为包含在内。

在您的示例中,情况并非如此,配置方法存在于不同的测试类中(这是完全有效的)。

这在我看来像是 TestNG 中的一个错误。

我已代表您提交了 TestNG 项目的错误,并将在即将发布的版本中修复它 (7.5.0)。

缺陷:https://github.com/cbeust/testng/issues/2611

【讨论】:

以上是关于当 @BeforeTest 方法失败时,为啥它没有在 testng-failed.xml 中列出?的主要内容,如果未能解决你的问题,请参考以下文章

java - 当没有接受long的方法时,为啥java将long参数提升为float/double?

为啥 MailKit SmtpClient.Send() 失败时我没有收到异常?

TestNG中BeforeClass和BeforeTest的区别

套接字:为啥阻塞 read() 会因 ENOTCONN 而失败?

当源文件表示脚本顶部的变量时,为啥 shellcheck 会失败?

为啥我的 api 模拟返回 404 错误?