Сценарий Java с огуречным порядком - PullRequest
0 голосов
/ 03 декабря 2018

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

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

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

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

login.feature

fill_form.feature

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

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

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

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

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

Спасибо

Ответы [ 4 ]

0 голосов
/ 06 декабря 2018

В огурцах все сценарии запускаются по алфавиту (поэтому @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>
0 голосов
/ 03 декабря 2018

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

Вы можете создать свой файл объектов следующим образом:

Сценарий: I Войдите как пользователь.

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

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

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

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

0 голосов
/ 05 декабря 2018

Файл функции

Функция: I Войдите в систему и заполните всю информацию

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

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

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

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;
}
0 голосов
/ 03 декабря 2018

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

  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"
Вызов шагов из определений шагов

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

...