如何从testng结果中忽略@BeforeMethod和@AfterMethod?
How to ignore @BeforeMethod and @AfterMethod from testng results?
以下是使用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>
请注意,afterMethod
和 beforeMethod
也被视为测试方法。我想忽略来自 testng-result.xml 的这些方法,因为我正在使用此 XML 进行进一步处理。
我有以下问题,
- 有没有办法在测试结果 xml 文件中避免
@BeforeMethod
和 @AfterMethod
方法?
- 有没有办法区分来自 test-method XML 标签的 before 和 after 方法?
( 即 我可以严格地将我的方法命名为
beforeMethod_Ignore()
和 afterMethod_Ignore()
但这将是一种 hack 而不是解决方案)
我浏览了以下链接,但还没有找到任何内容,
据我所知,没有直接的方法可以从 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
的包,其中您将 class org.testng.reporters.XMLReporter
的内容复制到此包中,更改方法 org.testng.reporters.XMLSuiteResultWriter#getTestResultAttributes
以将额外的属性添加到方法,如果它不是 @Test
方法。
以下是使用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>
请注意,afterMethod
和 beforeMethod
也被视为测试方法。我想忽略来自 testng-result.xml 的这些方法,因为我正在使用此 XML 进行进一步处理。
我有以下问题,
- 有没有办法在测试结果 xml 文件中避免
@BeforeMethod
和@AfterMethod
方法? - 有没有办法区分来自 test-method XML 标签的 before 和 after 方法?
( 即 我可以严格地将我的方法命名为
beforeMethod_Ignore()
和afterMethod_Ignore()
但这将是一种 hack 而不是解决方案)
我浏览了以下链接,但还没有找到任何内容,
据我所知,没有直接的方法可以从 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
的包,其中您将 classorg.testng.reporters.XMLReporter
的内容复制到此包中,更改方法org.testng.reporters.XMLSuiteResultWriter#getTestResultAttributes
以将额外的属性添加到方法,如果它不是@Test
方法。