Maven、包含和排除测试



我有一个场景,需要通过包含&排除某些测试组。

考虑以下情况

import org.testng.annotations.Test;
public class GroupingTest {
@Test(groups = {"bat"})
public void batTest(){
System.out.println("Am bat");
}
@Test(groups = {"p1"})
public void p1Test(){
System.out.println("Am p1");
}
@Test(groups = {"p2"})
public void p2Test(){
System.out.println("Am p2");
}
@Test(groups = {"bat","p3"})
public void batp3Test(){
System.out.println("Am bat p3 ");
}
}

在这里,我只能运行"bat"测试组,而它不应该运行"bat"测试,这也是一个"33"。在上述情况下,当我跑步时。。它应该只打印"Am bat"我怎样才能做到这一点?有什么建议吗?

基本上有两种方法可以完成这项工作。

方法#1:使用豆壳选择器

  1. 请确保您使用的是最新发布的TestNG版本。截至今天为7.0.0-beta1
  2. 添加对beanshell的依赖项(下面是如果您使用maven,将如何执行此操作(
<dependency>
<groupId>org.apache-extras.beanshell</groupId>
<artifactId>bsh</artifactId>
<version>2.0b6</version>
</dependency>
  1. 将您的TestNG套件xml更改为如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="53799427_suite" parallel="false" verbose="2">
<method-selectors>
<method-selector>
<script language="beanshell">
<![CDATA[
whatGroup = System.getProperty("group");
shouldRun = Arrays.equals(new String[]{whatGroup}, testngMethod.getGroups());
return shouldRun;
]]>
</script>
</method-selector>
</method-selectors>
<test name="53799427_test">
<classes>
<class name="com.rationaleemotions.stackoverflow.qn53799427.TestClassSample"/>
</classes>
</test>
</suite>

这里的测试类com.rationaleemotions.stackoverflow.qn53799427.TestClassSample看起来与您共享的示例完全相同。

现在,当您通过传递JVM参数-Dgroup=bat来运行这个套件xml文件时,您将看到一个输出,如下所示(后面是(

...
... TestNG 7.0.0-beta1 by Cédric Beust (cedric@beust.com)
...
Am bat
PASSED: batTest
===============================================
53799427_test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
53799427_suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

方法#2:使用自定义方法选择器

  1. 请确保您依赖于TestNG7.0.0-SNAPSHOT(我这么说的原因是,TestNG中有一个错误,导致该功能无法正常工作。我继续将其作为GITHUB-1985的一部分进行修复。但截至今日尚未发布(
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0-SNAPSHOT</version>
</dependency>

要使用快照版本,您可能需要在pom文件中添加如下所示的<repository>标记。

<repositories>
<repository>
<id>sonatype-nexus-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
  1. 现在创建一个自定义org.testng.IMethodSelector实现,如下所示:
import java.util.Arrays;
import java.util.List;
import org.testng.IMethodSelector;
import org.testng.IMethodSelectorContext;
import org.testng.ITestNGMethod;
public class FilteringMethodSelector implements IMethodSelector {
@Override
public boolean includeMethod(
IMethodSelectorContext context, ITestNGMethod method, boolean isTestMethod) {
String whichGroup = System.getProperty("group", "all");
if ("all".equalsIgnoreCase(whichGroup)) {
return true;
}
boolean isEqual = Arrays.equals(new String[]{whichGroup}, method.getGroups());
if (context != null) {
context.setStopped(true);
}
return isEqual;
}
@Override
public void setTestMethods(List<ITestNGMethod> testMethods) {}
}
  1. 创建一个testng套件xml文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="53799427_suite" parallel="false" verbose="2">
<method-selectors>
<method-selector>
<selector-class
name="com.rationaleemotions.stackoverflow.qn53799427.FilteringMethodSelector" priority="0"/>
</method-selector>
</method-selectors>
<test name="53799427_test">
<classes>
<class name="com.rationaleemotions.stackoverflow.qn53799427.TestClassSample"/>
</classes>
</test>
</suite>

这里的测试类com.rationaleemotions.stackoverflow.qn53799427.TestClassSample看起来与您共享的示例完全相同。

现在,当您通过传递JVM参数-Dgroup=bat来运行这个套件xml文件时,您将看到一个输出,如下所示(后面是(

...
... TestNG 7.0.0-SNAPSHOT by Cédric Beust (cedric@beust.com)
...
Am bat
PASSED: batTest
===============================================
53799427_test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
53799427_suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================

最新更新