Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过方法和组执行TestNG_Java_Testng - Fatal编程技术网

Java 通过方法和组执行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

我喜欢执行由方法和组过滤的测试。这在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
我的自动化框架生成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