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

时间:2018-10-26 13:08:16

标签: maven testng maven-surefire-plugin maven-shade-plugin

我有一个用于Selenium Automation的Maven项目。我正在以编程方式执行测试用例。我建立了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>

此外,测试类与DynamicSuiteHelper.java类位于同一程序包中。

DynamicSuiteHelper类的代码段:

    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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您的主班有问题。您将类称为com.automation.tests.test1.Test1Class1,但是共享的文件夹结构与包名称不匹配(其他类不是com.project.automation.tests.test1.Test1Class1等等吗?)。

因此,TestNG基本上会引发异常并中止执行,但是由于您的详细程度设置为1,所以您甚至根本看不到这些异常。

XmlClass还有另一个构造函数变体,您可以直接引用类名(请参阅javadocs here),而不是使用完全限定的类名作为字符串(这很容易出错,并且我个人不使用它。)

还将行dynamicTestNG.setVerbose(2);添加到代码中将确保您也开始看到这些错误。

答案 1 :(得分:0)

找到了一个解决方案,并启动了测试用例。

我使用了maven-shade-plugin而不是maven-assembly-plugin。我从插件外部添加了测试类,还添加了一些资源。

我观察到的是,maven-shade-plugin没有编译我的测试类。所以我尝试了maven-assembly-plugin

再次感谢大家给予您的时间。