如何从testng结果中忽略@BeforeMethod和@AfterMethod?

时间:2018-01-22 11:38:40

标签: java testng maven-surefire-plugin

以下是使用testng框架

创建的示例测试用例
public class MyTest {

    @BeforeMethod
    public void beforeMethod() {
    }

    @Test
    public void test1() {
    }

    @Test
    public void test2() {
    }

    @AfterMethod
    public void afterMethod() {
    }

}

我正在关注testng-results.xml文件,

<?xml version="1.0" encoding="UTF-8"?>
<testng-results skipped="0" failed="0" total="2" passed="2">
  <reporter-output>
  </reporter-output>
  <suite name="Surefire suite" duration-ms="15" started-at="2018-01-22T11:17:46Z" finished-at="2018-01-22T11:17:46Z">
    <groups>
    </groups>
    <test name="Surefire test" duration-ms="15" started-at="2018-01-22T11:17:46Z" finished-at="2018-01-22T11:17:46Z">
      <class name="com.my.test.MyTest">
        <test-method status="PASS" signature="beforeMethod()[pri:0, instance:com.my.test.MyTest@3567135c]" name="beforeMethod" is-config="true" duration-ms="4" started-at="2018-01-22T16:47:46Z" finished-at="2018-01-22T16:47:46Z">
          <reporter-output>
          </reporter-output>
        </test-method> <!-- beforeMethod -->
        <test-method status="PASS" signature="test1()[pri:0, instance:com.my.test.MyTest@3567135c]" name="test1" duration-ms="0" started-at="2018-01-22T16:47:46Z" finished-at="2018-01-22T16:47:46Z">
          <reporter-output>
          </reporter-output>
        </test-method> <!-- test1 -->
        <test-method status="PASS" signature="afterMethod()[pri:0, instance:com.my.test.MyTest@3567135c]" name="afterMethod" is-config="true" duration-ms="1" started-at="2018-01-22T16:47:46Z" finished-at="2018-01-22T16:47:46Z">
          <reporter-output>
          </reporter-output>
        </test-method> <!-- afterMethod -->
        <test-method status="PASS" signature="test2()[pri:0, instance:com.my.test.MyTest@3567135c]" name="test2" duration-ms="0" started-at="2018-01-22T16:47:46Z" finished-at="2018-01-22T16:47:46Z">
          <reporter-output>
          </reporter-output>
        </test-method> <!-- test2 -->
        <test-method status="PASS" signature="beforeMethod()[pri:0, instance:com.my.test.MyTest@3567135c]" name="beforeMethod" is-config="true" duration-ms="0" started-at="2018-01-22T16:47:46Z" finished-at="2018-01-22T16:47:46Z">
          <reporter-output>
          </reporter-output>
        </test-method> <!-- beforeMethod -->
        <test-method status="PASS" signature="afterMethod()[pri:0, instance:com.my.test.MyTest@3567135c]" name="afterMethod" is-config="true" duration-ms="0" started-at="2018-01-22T16:47:46Z" finished-at="2018-01-22T16:47:46Z">
          <reporter-output>
          </reporter-output>
        </test-method> <!-- afterMethod -->
      </class> <!--com.my.test.MyTest -->
    </test> <!-- Surefire test -->
  </suite> <!-- Surefire suite -->
</testng-results>

请注意,afterMethodbeforeMethod也被视为测试方法。我想要忽略testng-result.xml中的这些方法,因为我正在使用这个XML进行进一步处理。

我有以下问题,

  • 无论如何都要避免在测试结果xml文件中使用@BeforeMethod@AfterMethod方法吗?
  • 无论如何要区分测试方法XML标记之前和之后的方法吗? (我可以严格地将我的方法命名为beforeMethod_Ignore()afterMethod_Ignore(),但这将是一种破解,而不是解决方案)

我已经浏览了以下链接,但还找不到任何内容,

1 个答案:

答案 0 :(得分:2)

AFAIK,没有直接的方法从testng-results.xml文件中排除配置方法。

但是所有的说法和完成,testng-results.xml中的当前条目仍然可以让您区分配置方法和测试方法。

对于配置方法,还有一个名为is-config="true"的额外属性。

请参阅以下有关您自己的xml文件的摘录

<test-method 
    status="PASS" 
    signature="beforeMethod()[pri:0, instance:com.my.test.MyTest@3567135c]" 
    name="beforeMethod" 
    is-config="true" 
    duration-ms="4" 
    started-at="2018-01-22T16:47:46Z" 
    finished-at="2018-01-22T16:47:46Z">
    <reporter-output>
    </reporter-output>
</test-method> <!-- beforeMethod -->

但对于常规@Test方法,属性is-config=true将无法使用。

见下文:

<test-method 
    status="PASS" 
    signature="test1()[pri:0, instance:com.my.test.MyTest@3567135c]" 
    name="test1" 
    duration-ms="0" 
    started-at="2018-01-22T16:47:46Z" 
    finished-at="2018-01-22T16:47:46Z">
    <reporter-output>
    </reporter-output>
</test-method> <!-- test1 -->

这对您的下游xml处理有什么帮助吗?

如果仍然不适合你,那么其他选择包括:

  • 您将构建自己的org.testng.IReporter实现版本,其中您构建此xml,然后将其作为侦听器连接。
  • 您创建了一个名为org.testng.reporters的包,其中您将类org.testng.reporters.XMLReporter的内容复制到此包中,更改方法org.testng.reporters.XMLSuiteResultWriter#getTestResultAttributes以向该方法添加额外属性(如果它不是{ {1}}方法。