Cucumber 1.2.4 не находит определения шагов: "Вы можете реализовать пропущенные шаги с помощью фрагментов ниже" (2016)
Я пытаюсь запустить Cucumber с Maven в UNIX-подобной (к сожалению, я вынужден использовать Windows, хотя cmd.exe имеет те же результаты):
mvn clean test -Dcucumber.options="src/test/resources/com/example/sqa/automation_cuke/pages/sample_test.feature"
Результаты в:
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
...
[INFO] --- exec-maven-plugin:1.2.1:java (default) @ sqa.automation_cuke ---
Feature: My animals Sample
Sample test to use as basis for conversion
Scenario: My animals # sample_test.feature:4
Given that I have my animals
1 Scenarios (1 undefined)
1 Steps (1 undefined)
0m0.000s
You can implement missing steps with the snippets below:
@Given("^that I have my animals$")
public void that_I_have_my_animals() throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
Я просмотрел все популярные запросы Google/SO на наличие этих и похожих сообщений об ошибках. Многие, такие как Cucumber, не могут найти шаги при запуске одной функции, а Cucumber не находит определения шагов, скажем, чтобы указать мои определения шагов с помощью -r
и --require параметры, но они, кажется, были удалены из Cucumber в какой-то момент, как я получаю Unknown option: -r
ошибка.
Во многих других ответах говорится, что эта ошибка (как ни странно) возникает, когда параметр клея @CucumberOptions определен неправильно. Но я пробовал следующие клеи, и ни один не работал:
sqa.automation_cuke.pages
path:sqa.automation_cuke.pages
classpath:sqa.automation_cuke.pages
com.example.sqa.automation_cuke.pages
classpath:com.example.sqa.automation_cuke.pages
path:com.example.sqa.automation_cuke.pages
C:/development/cucumber-demo/src/main/java/com/example/sqa/automation_cuke/pages
src/main/java/com/example/sqa/automation_cuke/pages
classpath:C:/development/cucumber-demo/src/main/java/com/example/sqa/automation_cuke/pages
classpath:src/main/java/com/example/sqa/automation_cuke/pages
path:src/main/java/com/example/sqa/automation_cuke/pages
C:\\development\\cucumber-demo\\src\\main\\java\\com\\example\\sqa\\automation_cuke\\pages
src\\main\\java\\com\\example\\sqa\\automation_cuke\\pages
classpath:src\\main\\java\\com\\example\\sqa\\automation_cuke\\pages
path:src\\main\\java\\com\\example\\sqa\\automation_cuke\\pages
Я также попробовал:
- Определение - клей в
-Dcucumber.options
, - Изменение структуры каталогов моего исходного кода на src / test / java /example/automa_cuke, src / main / java /example/automa_cuke, src / test / resources /example/automa_cuke и т. Д.
- Помещение моего файла.feature в основные... ресурсы.
- Различные тексты в @Given, такие как
@Given("that I have my animals")
,
Это моя структура проекта. Я удостоверился, что структура ресурса соответствует остальной части кода согласно этому ответу:
sample_text.feature:
Feature: My animals Sample
Sample test to use as basis for conversion
Scenario: My animals
Given that I have my animals
MySampleTest.java:
package com.example.sqa.automation_cuke.pages;
@RunWith(Cucumber.class)
@CucumberOptions(glue = {"com.example.sqa.automation_cuke.pages"})
public class MySampleTest {
@Given("^that I have my animals$")
public void that_I_have_my_animals() throws Throwable {
// Write code here that turns the phrase above into concrete actions
System.out.println("MySampleTest.that_I_have_my_animals() ran!");
new MySample().printMySample();
throw new PendingException();
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
<artifactId>sqa.automation_cuke</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cucumber-jvm.version>1.2.4</cucumber-jvm.version>
<selenium.version>2.53.0</selenium.version>
<junit.version>4.12</junit.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>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>--plugin</argument>
<argument>junit:target/cucumber-junit-report/allcukes.xml</argument>
<argument>--plugin</argument>
<argument>pretty</argument>
<argument>--plugin</argument>
<argument>html:target/cucumber-html-report</argument>
</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-core</artifactId>
<version>${cucumber-jvm.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</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-core</artifactId>
<version>${cucumber-jvm.version}</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber-jvm.version}</version>
</dependency>
<!-- http://mvnrepository.com/artifact/info.cukes/cucumber-java -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber-jvm.version}</version>
</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.2</version>
</dependency>
</dependencies>
</project>
Любая помощь будет оценена!
5 ответов
У вас очень сложная настройка. Думая о законе Галла, я бы сделал перезапуск и основывался бы на том, что работает. Небольшой начальный проект доступен по адресу https://github.com/cucumber/cucumber-java-skeleton
Скачать / клонировать и запустить
mvn test
Это должно дать вам пропущенный шаг, но также должно дать вам некоторые определенные шаги. Посмотрите в исходном коде и добавьте отсутствующий шаг в src/test/java/skeleton/Stepdefs.java
Вам нужно установить атрибут features для параметров огурца, чтобы он работал.
Заменив аннотацию опций огурца на:
@CucumberOptions(features = {"classpath:com/example/sqa/automation_cuke/pages/sample_test.feature"},
glue = {"com.example.sqa.automation_cuke.pages"},
должно заставить это работать. Пожалуйста, обновите пост, если это не так.
ОБНОВИТЬ:
SampleTestStepDefiniton.java
package com.example.sqa.automation_cuke.pages;
import cucumber.api.java.en.Given;
public class SampleTestStepDefinition {
@Given("^that I have my animals$")
public void that_I_have_my_animals() throws Throwable {
// Write code here that turns the phrase above into concrete actions
System.out.println("MySampleTest.that_I_have_my_animals() ran!");
}
}
MySampleTest.java
package com.example.sqa.automation_cuke.pages;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(glue = { "com.example.sqa.automation_cuke.pages" }, features = {
"classpath:com/example/sqa/automation_cuke/pages/sample_test.feature" })
public class MySampleTest {
}
sample_test.feature
Feature: My animals Sample
Sample test to use as basis for conversion
Scenario: My animals
Given that I have my animals
ОБНОВИТЬ
Я думаю, что проблема вашего проекта заключается в том, что он не может найти тестовые классы (а также классы step def) в classpath. Я не понимаю, почему вы должны определить системную переменную CLASSPATH. Это может быть причиной этой проблемы. Однако переменная PATH должна оставаться и не должна содержать ссылки на конкретный проект.
Попробуйте избавиться от переменной CLASSPATH и замените тэг плагинов следующим:
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>utf8</encoding>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18</version>
</plugin>
</plugins>
Я мог бы запустить его на нескольких оконных средах с Java 8, а также Java 7. Держите меня в курсе!
Я также столкнулся с той же проблемой, тогда я понял, что пакет, импортированный для класса бегуна, отличался от класса определения шага
ТАК,
если для класса бегуна вы используете пакет io, как показано ниже
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
Затем вы также должны использовать тот же пакет io в определениях шагов
import io.cucumber.java.en.Given;
Я сделал ошибку при импорте пакета API
import cucumber.api.java.en.Given;
Я столкнулся с той же проблемой и только что обновил версию огурца-junit, огурца -java до 7.11.2 в pom.xml и перестроил проект. Затем проблема разрешилась, и мои действия по функциям были успешно выполнены.