无法通过以编程方式生成套件来执行测试用例

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

再次感谢大家的宝贵时间。