Сценарий Java с огуречным порядком

Я работаю над проектом автоматизации.

Мой первый сценарий - это функция входа в систему. Я работаю над SaaS, и мне нужно войти в систему раньше.

Поэтому я думал о первом сценарии login.feature и втором сценарии для заполнения формы.

У меня есть два файла:

login.feature

fill_form.feature

Я запускаю свои тесты с

mvn clean test -Dcucumber.options="--tags @login,@form"

Таким образом, он открывает два окна, но выполнение не работает должным образом: он запускает два сценария одновременно.

Чтобы это работало, мне нужно создать только один файл функций, но это не то, что мне нужно для моей архитектуры.

Предложения приветствуются!

Спасибо

4 ответа

Ваш подход правильный (вы не хотите дублирования кода), но вместо повторного использования файла функций вам следует повторно использовать шаг. У вас есть два варианта здесь:

  1. Фон

Вы можете указать, какой шаг должен быть вызван перед всеми сценариями в файле объектов. Например:

Background:
  given I logged in

Scenario: Fill a form
  then I filled a form

Scenario: Some other scenario
  then "here is some work for other scenario"
  1. Вызов шагов из определений шагов

Создайте определение шага, которое вызывает другие. В вашем случае это будет означать создание шага заполнения формы, который войдет в систему в начале.

В огурцах все сценарии выполняются в алфавитном порядке (так что @form перед @login). Вы можете переименовать свои сценарии в @001-login, @002form, @003...

Если вы используете Maven, вы можете добавить копию / заменить на org.apache.maven.plugins:maven-antrun-plugin а также com.google.code.maven-replacer-plugin:replacer

Образец:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <executions>
        <execution>
            <id>copy-order-scenarios</id>
            <phase>compile</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target name="copy">
                    <copy
                        file="src/test/resources/steps/scenarios/login.feature"
                        tofile="src/test/resources/steps/run/001-login.feature" />
                    <copy
                        file="src/test/resources/steps/scenarios/form.feature"
                        tofile="src/test/resources/steps/run/002-form.feature" />
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <executions>
        <execution>
            <id>replace order</id>
            <phase>compile</phase>
            <goals>
                <goal>replace</goal>
            </goals>
            <configuration>
                <basedir>${basedir}</basedir>
                <includes>
                    <include>src/test/resources/steps/run/001-*.feature</include>
                </includes>
                <token>login</token>
                <value>001-login</value>
            </configuration>
        </execution>
    </executions>
</plugin>

Как я полагаю, вы должны запустить тест, в котором вы пытаетесь войти, а затем заполните форму. Для этого вам не нужно создавать два разных файла

Вы можете создать свой файл функций, как это

Сценарий: я вхожу как пользователь.

Дано мне Войти с действительными учетными данными.

Когда я должен перейти к форме.

Тогда я должен заполнить все детали.

Все эти шаги будут связаны с определениями шагов.

Файл функции

Особенность: Я Войти и заполнить всю информацию

Сценарий: я вхожу в систему как пользователь, чтобы заполнить действительную информацию в форме

Дано Запустить приложение со страницы входа

Когда я Войти с действительными учетными данными пользователя

Класс Step-Definition (который включает в себя только все ваши шаги, из которых вы вызываете методы из другого класса для выполнения задач)

public class Some_functionality extend DriverInitializer {

WebDriver webDriver; 

@Given("^Start application from a Login page$")
public void start_application_from_signin_page() throws Throwable {

    webDriver = driverInitilizer();
}

@When("^I Login with valid user credentials")
public void login() throws Throwable {
    LoginSteps loginsteps = new LoginSteps();
    loginsteps.signinAsUser(webDriver);
}

}

Теперь вам нужно создать еще один класс, чтобы определить ваши шаги шаги

public class Loginsteps{

public void signinAsUser(Webdriver webDriver){
 //your code here
}

}

Вы можете вызывать метод signinAsUser везде, где хотите использовать

LoginSteps loginsteps = new LoginSteps();

loginsteps.signinAsUser(webDriver);

и вы можете инициировать драйвер в отдельном классе

public class DriverInitializer{


public WebDriver driverInitilizer(){
//your code to initialize driver
SetProperty...
return webdriver;
}
Другие вопросы по тегам