问题
Short Description
My Eclipse Maven project has a default TestNG suite (in the testng.xml
file), which runs all the tests, and customized TestNG suites, which runs only specified tests. From within the Eclipse IDE, I am able to run any TestNG suite but from the Windows 10 command line (mvn test -Dsurefire.suiteXmlFiles=/path/to/customized_TestNG_file
) the customized TestNG suites are ignored and only the default TestNG suite (in the testng.xml
file) is executed.
Details
TestNGProj
is an Eclipse Maven Project that contains two subtending Maven Modules TestNGMod1
and TestNGMod2
. The Project Explorer view of TestNGProj
is as follows:
The Project Explorer view of TestNGMod1
is as follows:
The pom
file TestNGProj
is as follows:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.newbie</groupId>
<artifactId>TestNGProj</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>TestNGProj</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<modules>
<module>TestNGMod1</module>
<module>TestNGMod2</module>
</modules>
</project>
The pom
file for TestNGMod1
is as follows:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.newbie</groupId>
<artifactId>TestNGProj</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>org.newbie</groupId>
<artifactId>TestNGMod1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>TestNGMod1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
The source code for TestsForPkg1
is as follows:
package Pkg01;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeClass;
public class TestsForPkg1 {
@BeforeClass
public void setup() {
System.out.println("\n********************* Pkg1::setup *********************");
}
@Test
public void method1Pkg1Test() {
System.out.println("\n********************* method1Pkg1Test *********************");
}
@Test
public void method2Pkg1Test() {
System.out.println("\n********************* method2Pkg1Test *********************");
}
}
The source code for TestsForPkg2
is as follows:
package Pkg02;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeClass;
public class TestsForPkg2 {
@BeforeClass
public void setup() {
System.out.println("\n********************* Pkg2::setup *********************");
}
@Test
public void method1Pkg2Test() {
System.out.println("\n********************* method1Pkg2Test *********************");
}
@Test
public void method2Pkg2Test() {
System.out.println("\n********************* method2Pkg2Test *********************");
}
}
The default test suite, as specified in testng.xml
, is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="5" name="Test">
<classes>
<class name="Pkg01.TestsForPkg1"/>
<class name="Pkg02.TestsForPkg2"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
Specialized test suite testng-Pkg1.xml
is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="5" name="Test">
<classes>
<class name="Pkg01.TestsForPkg1"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
Specialized test suite testng-Pkg2.xml
is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="5" name="Test">
<classes>
<class name="Pkg02.TestsForPkg2"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
From within Eclipse I can run any test suite without any issues.
The problem arises when I try to run the test suites from the Windows command line. I have used various command strings from the project directory but no matter what I do, it is only the default TestNG suite (in the testng.xml
file) that gets executed.
I tried the following:
mvn test -Dsurefire.suiteXmlFiles=testng-Pkg1.xml
mvn test -Dsurefire.suiteXmlFiles="C:\Workspace Stackoverflow\TestNGProj\TestNGMod1\testng-Pkg1.xml"
mvn test -Dsurefire.suiteXmlFiles=testng-Pkg2.xml
mvn test -Dsurefire.suiteXmlFiles="C:\Workspace Stackoverflow\TestNGProj\TestNGMod1\testng-Pkg2.xml"
In each case I got an output similar to this:
As can be seen, in all instances it is the default test suite (which has all the tests) that gets executed. As mentioned earlier, from within Eclipse this is not the case and all the desired test suites can be invoked, without any issues.
来源:https://stackoverflow.com/questions/58868103/non-default-testng-file-ignored-during-command-line-execution-dsurefire