Невозможно выполнить тестовые примеры с помощью программной генерации набора

У меня есть проект Maven для моей Selenium Automation. Я программно выполняю тестовые случаи. Я создал класс DynamicSuiteHelper.java для динамического создания моего пакета. Когда я запускаю это из своей Eclipse IDE, он выполняется, как и ожидалось. Теперь я хочу выполнить этот код с помощью Maven.

Итак, сначала я сделал mvn clean install. И затем, когда я запустил файл Automation.jar, он начал выполняться, но результаты показывают, что было выполнено 0 тестов. Поэтому я проверил выходную папку, которая показала, что файл набора был создан, и он был создан, как я и предполагал.

Я использую три плагина:

1) maven-верный:

<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: (для создания исполняемых банок)

<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

Любая помощь приветствуется.


person Sagar Jani    schedule 26.10.2018    source источник
comment
Где вы определяете классы для своих тестов в помощнике динамического набора?   -  person Bill Hileman    schedule 26.10.2018
comment
Забыл добавить, что POC. Добавлены классы.   -  person Sagar Jani    schedule 29.10.2018


Ответы (2)


В вашем основном классе возникла проблема. Вы ссылаетесь на класс как com.automation.tests.test1.Test1Class1, но структура папки, которой вы поделились, не соответствует имени пакета (не должно ли это быть com.project.automation.tests.test1.Test1Class1 и т. д. для других классов?).

Таким образом, TestNG в основном выдает исключение и прерывает выполнение, но, поскольку ваша многословность установлена ​​​​на 1, вы, возможно, даже не видите эти исключения.

У XmlClass есть еще один вариант конструктора, в котором вы можете напрямую ссылаться на имя класса (см. javadocs здесь) вместо того, чтобы прибегать к полному имени класса в виде строки (это может быть очень подвержено ошибкам, и я лично остаюсь от использования этого).

Кроме того, добавление строки dynamicTestNG.setVerbose(2); в ваш код гарантирует, что вы также начнете видеть эти ошибки.

person Krishnan Mahadevan    schedule 30.10.2018
comment
Спасибо за вклад Кришнан. Но я заметил, что хотя я удалил плагин surefire из своего файла pom и выполнил чистую установку mvn, консоль показала, что плагин surefire выполняет тесты, но пакет не тот, который создает DynamicSuiteHelper. Но когда я вручную добавляю тот же набор в плагин surefire, он будет работать нормально, как и предполагалось. Кроме того, ранее, когда я запускал чистую установку mvn, в целевой папке тестовые классы показывали, что тестов нет. Может ли это быть связано с конвенцией maven? И если да, можете ли вы поделиться URL? Спасибо, Сагар. - person Sagar Jani; 31.10.2018
comment
Я пробовал с verbose=2. Я получил следующее сообщение: [TestNG] No tests found. Nothing was run. Я подозревал, что тестовые классы не добавляются, и, к сожалению, это оказалось правдой. Позвольте мне изучить это и вернуться. - person Sagar Jani; 31.10.2018

Нашел решение и запустил тестовые примеры.

Вместо maven-shade-plugin я использовал maven-assembly-plugin. Я добавил тестовые классы извне из плагина, а также некоторые ресурсы.

Я заметил, что maven-shade-plugin не компилировал мои тестовые классы. Так что я попробовал с maven-assembly-plugin.

Еще раз спасибо всем за уделенное время.

person Sagar Jani    schedule 01.11.2018