Не знаете, как запустить бегун с помощью AbstractTestNGCucumberTests

Я не уверен, как запустить класс бегуна в Eclipse, используя AbstractTestNGCucumberTests

У меня есть проект, предназначенный для использования TestNG для запуска набора тестов Cucumber.

Я выполнил все шаги во всех документах, которые смог найти, но не могу запустить бегун способом, который распознает аннотации testNG в классе, например @BeforeMethod.

Проект отлично работает как тест Junit, если я раскомментирую строку @RunWith в классе бегуна, но когда я комментирую @RunWith, он не запускается как проект TestNG и по-прежнему ведет себя как проект junit.

Если я выберу CukesRunner и нажму «Запуск от имени», тип запуска не будет отображаться, и я могу выбрать только запуск его как Junit из записи истории. Я не могу найти способ запустить Cukesrunner так, чтобы он вызывал поведение TestNG класса AbstractTestNGCucumberTests.

Плагин TestNG отлично работает в этой системе, проекты включения testNG работают нормально, если они не включают класс огурца или класса AbstractTestNGCucumberTests.

Вот основные компоненты проекта:

testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Cucumber-numbers-game" >
  <test name="Play_Games" >
    <classes>
      <class name="com.example.GameSteps" />  
    </classes>
  </test>
</suite>

пом.xml

<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>example</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <repositories>
    <repository>
      <id>sonatype-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <dependencies>

      <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-testng</artifactId>
        <version>1.2.4</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>info.cukes</groupId>
      <artifactId>cucumber-junit</artifactId>
      <version>1.1.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>info.cukes</groupId>
      <artifactId>cucumber-java</artifactId>
      <version>1.1.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

CukesRunner.java

package com.example;

import cucumber.api.junit.Cucumber;
// import org.junit.runner.RunWith;
import cucumber.api.testng.AbstractTestNGCucumberTests;

// @RunWith(Cucumber.class)
@Cucumber.Options(
        features={"src/test/resources"}
)
public class CukesRunner extends AbstractTestNGCucumberTests{}

GameSteps.java

package com.example;    
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import org.testng.annotations.*;
import static org.junit.Assert.assertEquals;

public class GameSteps {
    private Game _target;
    private String _actualResult;

    @BeforeMethod
    public void setUp() {
    System.out.println("@BeforeMethod: The annotated method will be run before each test method.");
    }

    @Test

    @Given("^I am officiating a \"([^\"]*)\" game$")
    public void I_am_officiating_a_game(String gameTypeName) {
        System.out.println("^I am officiating a \"([^\"]*)\" game$");
        GameType gameType = GameType.valueOf(gameTypeName);
        _target = GameFactory.createGame(gameType);
    }

    @When("^the number (\\d+) is played$")
    public void the_number_is_played(int playedNumber) {
        System.out.println("^the number (\\d+) is played$");
        _actualResult = _target.checkPlay(playedNumber);
    }

    @Then("^I should be told the correct answer is \"([^\"]*)\"$")
    public void I_should_be_told_the_correct_answer_is(String expectedResult) {
        System.out.println("^I should be told the correct answer is \"([^\"]*)\"$");
        assertEquals(expectedResult, _actualResult);
    }
}

Игра.функция

Feature: Number Games
  So that plays can be validated
  As a number game umpire
  I want to enter a play and see the correct answer

  Scenario Outline: A game of FizzBuzz
    Given I am officiating a "FizzBuzz" game
    When the number <played> is played
    Then I should be told the correct answer is "<result>"

  Examples:
    | played | result   |
    | 1      | 1        |
    | 2      | 2        |
    | 3      | Fizz     |
    | 5      | Buzz     |
    | 6      | Fizz     |
    | 10     | Buzz     |
    | 15     | FizzBuzz |

  Scenario Outline: A game of Crash Bang Wallop
    Given I am officiating a "CrashBangWallop" game
    When the number <played> is played
    Then I should be told the correct answer is "<result>"

  Examples:
    | played | result          |
    | 1      | 1               |
    | 2      | 2               |
    | 3      | Crash           |
    | 5      | Bang            |
    | 7      | Wallop          |
    | 15     | CrashBang       |
    | 35     | BangWallop      |
    | 21     | CrashWallop     |
    | 105    | CrashBangWallop |

Вот скриншот структуры проекта:

Вот скриншот структуры проекта:


person Charles F Radley    schedule 17.08.2016    source источник


Ответы (1)


Да, при запуске тестов из вашего cukes runner нет типа запуска testNG, однако его все же можно выполнить из cukes runner, создав рабочий профиль вручную (просто укажите класс в вашей конфигурации запуска testNG), однако я считаю, что это не лучший способ сделать это, поэтому, если вы хотите выполнять свои функции локально, я бы предложил 2 варианта:

  • Использование Maven и указание аргумента cucumber.options, если вы хотите выполнить одну функцию
  • Использование средства запуска функций огурца (чтобы установить его, добавьте следующее репо в свое затмение: https://cucumber.io/cucumber-eclipse/update-site)

Я вижу, что по какой-то причине вы пытаетесь использовать аннотации testNG в своем классе Steps, исключая аннотации @Test и @BeforeMethod, если вам нужно настроить тест, рассмотрите возможность использования аннотации @Before из Cucumber API, вы даже можете указать порядок своего @Before's как это:

@Before(order=1)

И вообще нет необходимости в аннотациях @Test, вы указываете свой тест в своем файле функций.

P.S. О, и я думаю, что вам нужно добавить опцию glue в свой класс cukes runner в разделе @CucumberOptions

Надеюсь, поможет.

person Mikhail    schedule 18.08.2016
comment
Спасибо за ваш ответ. Я все еще озадачен. - person Charles F Radley; 20.08.2016
comment
1) Я не понимаю это утверждение: его все еще можно выполнить из cukes runner, создав рабочий профиль вручную (просто укажите класс в вашей конфигурации запуска testNG) - вы имеете в виду создание конфигураций запуска в Eclipse? У меня не было никакого успеха в этом, ни один из вариантов конфигурации запуска не работает ..... все они терпят неудачу с различными ошибками, см. пункт 3) ниже 2) Использование maven... это будет командная строка, правильно ? Можете ли вы предоставить образец командной строки? - person Charles F Radley; 20.08.2016
comment
3) Использование функции запуска огурцов: у меня уже есть файл cukesrunner, как показано ранее. Как мне запустить его в Eclipse? Если я запускаю без @Runwith, это перестает быть тестом Junit. Если я попытаюсь запустить его как приложение Java, произойдет сбой, говоря, что нет основного класса. Если я попытаюсь запустить его как Java-апплет, он завершится ошибкой. Нет опции TestNG для запуска. так что я в полной растерянности относительно того, как можно запустить это из затмения... Мне кажется, что здесь не хватает чего-то действительно простого... - person Charles F Radley; 20.08.2016
comment
4) аннотации testNG в вашем классе Steps: да, именно так это и должно работать, верно? Где еще я мог бы разместить аннотации? 5) Вы говорите, что нет необходимости в аннотации @Test ... это противоречит большинству документов, которые я видел .... 6) Опция клея: я могу запускать тесты огурца без какой-либо опции клея, не так ли? нужно для TestNG? Я все еще не могу запустить тест Cucumber с помощью TestNG ..... - person Charles F Radley; 20.08.2016
comment
1. Да, создайте конфигурацию запуска в Eclipse (раскройте меню «Выполнить» -> «Конфигурации запуска» -> дважды щелкните TestNG на панели навигации). Все, что я сделал, это указал Class в разделе Run... и предоставил необходимые аргументы (под словами «требуется» я имею в виду «требуется» в моей структуре, есть вероятность, что вы не в вашем случае необходимо указать какие-либо аргументы) 2. Maven в моем случае команда maven выглядит так: mvn test - если выполняется из командной строки непосредственно в папке проекта ИЛИ цель: test и выбран пакет, если он выполняется из Eclipse (вы также можете создавать конфигурации запуска maven в eclipse) - person Mikhail; 22.08.2016
comment
3. Чтобы использовать функцию запуска, вам нужно выполнить функцию напрямую, а не из вашего cukes runner, т.е. открыть файл функции и запустить->Запустить как...->Огуречная функция. Если вам нужно предоставить какие-либо аргументы, вы можете сделать это на вкладке Аргументы 4. Вам не нужно размещать какие-либо аннотации @Test при написании тестов с использованием функции, поэтому вы расширяете AbstractTestNGCucumberTests P.S. Одна важная вещь: когда вы запускаете функции напрямую, как описано в 3, ваш бегун НЕ применяется, т. е. все параметры, указанные в бегуне, не будут применяться. - person Mikhail; 22.08.2016
comment
Краткая сводка по бегунам: при запуске с помощью вашего cuke runner ИЛИ с использованием maven - runner влияет на выполнение вашего теста (вы можете указать клей, функции для запуска в нем и другие параметры). Вы можете переопределить параметры бегуна, используя cucumber.options, используя вкладку аргументов виртуальной машины, например: -Dcucumber.options=--format json-pretty. При запуске одной функции с помощью средства запуска функций Cucumber напрямую из файла функций средство запуска не влияет на ваше выполнение. - person Mikhail; 22.08.2016