Java 通过方法和组执行TestNG
我喜欢执行由方法和组过滤的测试。这在TestNG中可能吗 比如说。我有以下两个TestNG类和两个方法Java 通过方法和组执行TestNG,java,testng,Java,Testng,我喜欢执行由方法和组过滤的测试。这在TestNG中可能吗 比如说。我有以下两个TestNG类和两个方法 Class - SampleJ1 Methods - Test1(group=sanity), Test2(group=regression), Test3, Test4, Test5 Class - SampleJ2 Methods - Test1(group=sanity), Test2(group=regression), Test3, Test4, Test5 我的自动化框架生成Te
Class - SampleJ1
Methods - Test1(group=sanity), Test2(group=regression), Test3, Test4, Test5
Class - SampleJ2
Methods - Test1(group=sanity), Test2(group=regression), Test3, Test4, Test5
我的自动化框架生成TestNG XML文件。如果我用下面的数据创建XML文件,它应该只执行上述方法的健全组
<groups>
<run>
<include name="sanity" />
</run>
</groups>
<test thread-count="12" name="Browser">
<classes>
<class name="SampleJ1">
<include method="Test1"/>
<include method="Test2"/>
<include method="Test3"/>
<include method="Test4"/>
</class>
<class name="SampleJ2">
<include method="Test1"/>
<include method="Test2"/>
<include method="Test3"/>
<include method="Test4"/>
</class>
</classes>
</test>
请让我知道这是否可行。据我所知,您希望按其名称和所属组筛选要执行的测试方法。 首先,在纯TestNG中没有专门的解决方案(否则一些TestNG专家,如@juherr,可能会给出答案)。跳过带有
InvokedMethodListener
实现的测试方法会留下您可能不想要的日志
我看到两种选择
在第一种方法中,您可以实现一个@Factory
方法,该方法可以使用Set
或Set
作为构造函数的参数来实例化测试类。在每个测试类中,您将检查要执行的方法(或其字符串
表示)是否在集中<代码>@Before
注释或Before调用
方法将处理逻辑,无论是否执行给定的方法。此外,您的testng.xml
将指定要运行的
元素。同样,这可能有一个缺点,就是在日志和报告中保留Skipped:x
第二种选择是充分利用Maven及其应用程序。(如果您不使用任何构建工具,如Gradle或Maven,那么我相信您应该尝试)。使用Maven进行测试时,可以指定必须执行哪些组和哪些测试方法。
您的pom.xml
应该与以下内容非常相似:
<!-- modelVersion, groupId, etc. -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
<!-- (...) -->
</plugins>
<!-- (...) -->
</build>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
</dependency>
<!-- (...) -->
</dependencies>
在testng.xml
中,可以放置要执行的组的信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite Name">
<groups>
<run>
<include name="secondGroup"/>
</run>
</groups>
<test name="Default Test Name">
<classes>
<class name="TestClass"/>
</classes>
</test>
</suite>
可以找到多个方法和多个类的语法。输出: 第四个方法尚未执行,即使它属于
secondGroup
。
如果有许多方法要执行,您可以为其编写自定义bash脚本
不可能(至少对我来说)用Maven过滤组,用TestNG过滤方法 预期的行为是什么?您当前的套件文件包含所有内容,因此所有内容都将运行.Ya。实际上,它将执行我包含的任何方法。或者,它将执行我提到的所有组。我的问题是,有没有办法将两者结合起来?在本例中,我只希望对我包含的方法执行组健全性。@Jeyabal,您使用Maven吗?@GrzegorzGórkiewicz。是的,我正在使用Maven。非常感谢您如此详细的解释。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite Name">
<groups>
<run>
<include name="secondGroup"/>
</run>
</groups>
<test name="Default Test Name">
<classes>
<class name="TestClass"/>
</classes>
</test>
</suite>
mvn clean -Dtest=TestClass#thirdMethod+secondMethod test
Running TestClass
secondMethod
thirdMethod
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0