无法通过以编程方式生成套件来执行测试用例
Not able to execute test cases via programatically suite generation
我有一个用于我的 Selenium Automation 的 Maven 项目。我正在以编程方式执行测试用例。我已经构建了 class DynamicSuiteHelper.java
来动态创建我的套件。当我从我的 Eclipse IDE 中 运行 它按预期执行时。现在,我想使用 Maven 执行这段代码。
所以我先做了 mvn clean install
。然后当我 运行 automation.jar 文件开始执行时,但结果显示 0 个测试是 运行。所以我检查了输出文件夹,它显示套件文件已创建并且是按我的预期创建的。
我正在使用三个插件:
1) maven-surefire:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
2) maven 编译器:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<fork>true</fork>
<compilerArgs>
<arg>-verbose</arg>
<arg>-Xlint:all,-options,-path</arg>
</compilerArgs>
</configuration>
</plugin>
3)maven-shade:(用于生成可执行jar)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.project.automation.tests.DynamicSuiteHelper</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
此外,测试 classes 与 DynamicSuiteHelper.java class 在同一个包中。
DynamicSuiteHelper 的代码片段 class:
TestNG dynamicTestNG = new TestNG();
XmlSuite dynamicSuite = new XmlSuite();
List<XmlTest> listOfTests = new ArrayList<XmlTest>();
XmlTest dynamicTest = new XmlTest(dynamicSuite);
List<XmlClass> listOfClasses = new ArrayList<XmlClass>();
listOfClasses.add(new XmlClass("com.project.automation.tests.test1.Test1Class1"));
listOfClasses.add(new XmlClass("com.project.automation.tests.test1.Test1Class2"));
listOfClasses.add(new XmlClass("com.project.automation.tests.test2.Test2Class1"));
listOfClasses.add(new XmlClass("com.project.automation.tests.test2.Test2Class1"));
dynamicTest.setClasses(listOfClasses );
listOfTests.add(dynamicTest);
dynamicSuite.setTests(listOfTests);
List<XmlSuite> listOfSuites = new ArrayList<XmlSuite>();
listOfSuites.add(dynamicSuite);
dynamicTestNG.setXmlSuites(listOfSuites);
dynamicTestNG.run();
项目结构也如下所示:
project
|--automation
|--tests
|--test1
|--Test1Class1.java
|--Test1Class2.java
|--test2
|--Test2Class1.java
|--Test2Class2.java
|--BaseTest.java
|--DynamicSuiteHelper.java
感谢任何帮助。
您的主 class 有问题。您将 class 称为 com.automation.tests.test1.Test1Class1
但您共享的文件夹结构与包名称不匹配(不应该是 com.project.automation.tests.test1.Test1Class1
等等 class是吗?)。
所以 TestNG 基本上是抛出异常并中止执行,但由于您的冗长设置为 1
,您可能甚至看不到这些异常。
XmlClass
有另一个构造函数变体,其中您可以直接引用 class 名称(参见 javadocs here),而不是求助于完全限定的 class 名称一个字符串(这很容易出错,我个人远离使用它)。
同时将行 dynamicTestNG.setVerbose(2);
添加到您的代码中将确保您也开始看到这些错误。
找到解决方案并启动测试用例 运行。
我使用了 maven-assembly-plugin
而不是 maven-shade-plugin
。我从插件外部添加了测试 类,还有一些资源。
我观察到的是,maven-shade-plugin
没有编译我的测试-类。所以我尝试了 maven-assembly-plugin
。
再次感谢大家的宝贵时间。
我有一个用于我的 Selenium Automation 的 Maven 项目。我正在以编程方式执行测试用例。我已经构建了 class DynamicSuiteHelper.java
来动态创建我的套件。当我从我的 Eclipse IDE 中 运行 它按预期执行时。现在,我想使用 Maven 执行这段代码。
所以我先做了 mvn clean install
。然后当我 运行 automation.jar 文件开始执行时,但结果显示 0 个测试是 运行。所以我检查了输出文件夹,它显示套件文件已创建并且是按我的预期创建的。
我正在使用三个插件:
1) maven-surefire:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
2) maven 编译器:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<fork>true</fork>
<compilerArgs>
<arg>-verbose</arg>
<arg>-Xlint:all,-options,-path</arg>
</compilerArgs>
</configuration>
</plugin>
3)maven-shade:(用于生成可执行jar)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.project.automation.tests.DynamicSuiteHelper</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
此外,测试 classes 与 DynamicSuiteHelper.java class 在同一个包中。
DynamicSuiteHelper 的代码片段 class:
TestNG dynamicTestNG = new TestNG();
XmlSuite dynamicSuite = new XmlSuite();
List<XmlTest> listOfTests = new ArrayList<XmlTest>();
XmlTest dynamicTest = new XmlTest(dynamicSuite);
List<XmlClass> listOfClasses = new ArrayList<XmlClass>();
listOfClasses.add(new XmlClass("com.project.automation.tests.test1.Test1Class1"));
listOfClasses.add(new XmlClass("com.project.automation.tests.test1.Test1Class2"));
listOfClasses.add(new XmlClass("com.project.automation.tests.test2.Test2Class1"));
listOfClasses.add(new XmlClass("com.project.automation.tests.test2.Test2Class1"));
dynamicTest.setClasses(listOfClasses );
listOfTests.add(dynamicTest);
dynamicSuite.setTests(listOfTests);
List<XmlSuite> listOfSuites = new ArrayList<XmlSuite>();
listOfSuites.add(dynamicSuite);
dynamicTestNG.setXmlSuites(listOfSuites);
dynamicTestNG.run();
项目结构也如下所示:
project
|--automation
|--tests
|--test1
|--Test1Class1.java
|--Test1Class2.java
|--test2
|--Test2Class1.java
|--Test2Class2.java
|--BaseTest.java
|--DynamicSuiteHelper.java
感谢任何帮助。
您的主 class 有问题。您将 class 称为 com.automation.tests.test1.Test1Class1
但您共享的文件夹结构与包名称不匹配(不应该是 com.project.automation.tests.test1.Test1Class1
等等 class是吗?)。
所以 TestNG 基本上是抛出异常并中止执行,但由于您的冗长设置为 1
,您可能甚至看不到这些异常。
XmlClass
有另一个构造函数变体,其中您可以直接引用 class 名称(参见 javadocs here),而不是求助于完全限定的 class 名称一个字符串(这很容易出错,我个人远离使用它)。
同时将行 dynamicTestNG.setVerbose(2);
添加到您的代码中将确保您也开始看到这些错误。
找到解决方案并启动测试用例 运行。
我使用了 maven-assembly-plugin
而不是 maven-shade-plugin
。我从插件外部添加了测试 类,还有一些资源。
我观察到的是,maven-shade-plugin
没有编译我的测试-类。所以我尝试了 maven-assembly-plugin
。
再次感谢大家的宝贵时间。