【问题标题】:Not able to execute test cases via programatically suite generation无法通过编程套件生成执行测试用例
【发布时间】:2018-10-26 13:08:15
【问题描述】:

我有一个用于 Selenium 自动化的 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: (用于生成可执行jars)

<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 类的代码 sn-p:

    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

感谢任何帮助。

【问题讨论】:

  • 你在哪里定义你的动态套件助手中的测试类?
  • 忘记添加 POC。添加了类。

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


【解决方案1】:

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

所以 TestNG 基本上是抛出异常并中止执行,但由于您的详细程度设置为 1,您可能甚至看不到这些异常。

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

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

【讨论】:

  • 感谢克里希南的意见。但我观察到的是,即使我从我的 pom 文件中删除了 surefire 插件,并进行了 mvn clean install,控制台显示 surefire 插件正在运行测试,但该套件不是 DynamicSuiteHelper 正在创建的套件。但是当我手动将相同的套件添加到surefire插件时,它会正常工作。此外,早些时候当我在目标文件夹中运行 mvn clean install 时,测试类显示没有测试。它可能与maven约定有关吗?如果是的话,你能分享一个网址吗?谢谢,萨加尔。
  • 我尝试使用verbose=2。我收到以下消息:[TestNG] No tests found. Nothing was run。我怀疑没有添加测试类,不幸的是事实证明这是真的。让我看看这个然后回来。
【解决方案2】:

找到解决方案并启动并运行测试用例。

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

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

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

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 2015-09-29
    • 1970-01-01
    • 2017-08-16
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多