Как запустить тесты cucumber-jvm с maven

Как мне запустить тесты огурца, которые у меня есть в следующих местах с Maven.

Исходные папки src / main / java и src / main / resources включают определения шагов и файлы функций в пакете com.testing.TestProject.login, созданном в каждой исходной папке.

Я включил плагины и зависимости в файл POM, но когда я запускаю фазовый интеграционный тест maven, тесты огурца не выполняются.

Я новичок в Maven. Пожалуйста, дайте мне знать, что включить в файл POM для запуска тестов огурца с Maven.

Вот мой файл POM:

   <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.testing</groupId>
  <artifactId>MyMavenProject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MyMavenProject</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cucumber-jvm.version>1.1.5</cucumber-jvm.version>
    <selenium.version>2.39.0</selenium.version>
    <junit.version>4.11</junit.version>
  </properties>

    <build>

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executableDependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-core</artifactId>
                </executableDependency>
                <mainClass>cucumber.api.cli.Main</mainClass>
                <arguments>
                    <argument>--format</argument>
                    <argument>junit:target/cucumber-junit-report/allcukes.xml</argument>
                    <argument>--format</argument>
                    <argument>pretty</argument>
                    <argument>--format</argument>
                    <argument>html:target/cucumber-html-report</argument>
                    <argument>--tags</argument>
                    <argument>@login</argument>
                    <argument>--glue</argument>
                    <argument>com/</argument>
                    <argument>src/</argument>
                </arguments>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>info.cukes</groupId>
                    <artifactId>cucumber-core</artifactId>
                    <version>1.1.5</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>  

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-picocontainer</artifactId>
        <version>${cucumber-jvm.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber-jvm.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.8.7</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
</dependency>
</dependencies>
</project>

Заранее спасибо.


person user3188928    schedule 02.02.2014    source источник


Ответы (3)


Ваши тестовые классы должны заканчиваться суффиксом Test.

person Sergiu Indrie    schedule 29.07.2015
comment
В классе у меня есть аннотация @RunWith (Cucumber.class), я вставил суффикс Test, и он решил мои проблемы - person Fabio Araujo; 03.09.2015
comment
Спасибо за этот ответ, Серджиу. Я хотел бы добавить, что он не может заканчиваться ни тестами (множественное число), ни тестом (нижний регистр). - person Adam Howell; 03.07.2018

Я предпочитаю запускать тесты Cucumber JVM из Maven, чтобы соединить их через JUnit, предоставив класс RunCukesTest, который запускает Cucumber из JUnit. Я считаю, что это проще и с большим контролем, чем при использовании определенного плагина Cucumber для Maven. Кроме того, это больше не зависит от инструмента сборки. Большинство инструментов сборки поддерживают JUnit "из коробки" без какой-либо дополнительной настройки. Запуск огурца непосредственно из инструмента сборки потребует использования плагина и его настройки.

Запуск Cucumber через JUnit, как показано ниже, работает не только с Maven, но и с Gradle.

Однако обратите внимание, что это запускает ваши тесты Cucumber с тем же запуском, что и тесты JUnit. Это может быть то, что вы хотите, а может и не быть. По соображениям производительности выполнения тестов вы можете захотеть сохранить модульные тесты / тесты разработчиков, тесты интеграции / архитектуры и приемочные / пользовательские тесты в отдельных выполнениях. Но даже если вы их разделите, я рекомендую видеть выбор тестового фреймворка ортогональным слоям пирамиды автоматизации тестирования. Это означает, что вы можете изменить имя RunCukesTest на, скажем, RunCukesIT или любую другую схему именования, которую вы используете для выбора, или поместить их в другой путь. Что легче

Типичный класс RunCukesTest может выглядеть так:

package com.testing;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/resources/features",
        glue = "com.testing"
)
public class RunCukesTest {
}

Пояснение к деталям:

  • @RunWith(Cucumber.class) сообщает JUnit не запускать этот тестовый класс с его средством выполнения по умолчанию, а вместо этого с Cucumber, который является средством выполнения тестов для JUnit4, который запускает Cucumber из JUnit.
  • @CucumberOptions tells Cucumber where to find its stuff. The main things are:
    • features tells Cucumber where to find the feature files.
    • glue сообщает Cucumber, какие пакеты содержат определения шагов.

Обратите внимание, что приведенный выше пример предназначен для ситуации, когда тесты, написанные на Cucumber, ортогональны архитектуре вашего пакета. Для простых проектов возможна более простая настройка: поместите файлы функций и определения шагов в тот же каталог / пакет в src/resources, что и RunCukesTest в src/java, и удалите аннотацию @CucumberOptions.

Комбинирование Cucumber с JUnit5 все еще немного сложно и громоздко. Я обновлю этот ответ с помощью JUnit5, как только найду его практичным.

person Christian Hujer    schedule 11.11.2016

По стандартам maven тесты должны быть в src/test/java, а не в src/main/java. Мне нравится ваш pom.xml. Я подозреваю, что если вы импортируете свои тесты и ресурсы из папки main в test, ваши тесты должны выполняться нормально.

person nilesh    schedule 04.02.2014
comment
Я попытался перенести тесты в src / test / java, но тесты все равно не выполняются. - person user3188928; 04.02.2014
comment
Что такое параметр клея и его значения _1 _, _ 2_. Также в вашем тесте есть тег @login? Вы получаете ошибку или тесты просто не запускаются? - person nilesh; 04.02.2014
comment
Параметры клея - это ПУТЬ, откуда загружаются определения шагов и перехватчики. да, у меня в тестах есть тег @login. Я попытался удалить параметры клея, а также тег. по-прежнему тесты на огурцы не выполняются. - person user3188928; 05.02.2014
comment
при запуске тестов ошибок нет. но отображается следующее предупреждающее сообщение [INFO] --- maven-resources-plugin: 2.6: resources (default-resources) @ CucumberTestProject --- [ПРЕДУПРЕЖДЕНИЕ] Использование кодировки платформы (на самом деле Cp1252) для копирования отфильтрованных ресурсов, т. е. сборка зависит от платформы! [ИНФОРМАЦИЯ] пропустить несуществующий каталог ресурсов C: \ MavenRep \ MyCucumberTestProject \ CucumberTestProject \ src \ main \ resources - person user3188928; 05.02.2014
comment
Я понял, в чем проблема. Мое занятие бегуном не закончилось тестом. когда я изменил имя класса runner на suiterunnertest из suiterunner, тесты начали выполняться. Спасибо nilesh за вашу помощь - person user3188928; 05.02.2014