Как внедрить передовые методы Spock Parameterized test? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть тестовая спецификация, которую можно запустить с уникальным набором данных.Лучшая практика для этого немного неясна.Как следует изменить приведенный ниже код для работы с:

@Stepwise
class marktest extends ShopBootStrap  {

   private boolean useProductionUrl = false

   def "Can Access Shop DevLogin page"() {
       // DevStartLogin: 'New OE Start' button click
       setup:
           println System.getProperty("webdriver.chrome.driver")
       when:
           to ShopDevStartPage
       then:
           at ShopDevStartPage
   }

   def "on start enrollment, select 'United States' and click 'continue' button"() {
       when: "enter Sponsor ID and click New OE Start"
           to ShopDevStartPage
           sponsorId.value(ShopDevStartPage.SPONSORID)
           NewOEButton.click()
       then:
           waitFor { NewEnrollmentPage }
   }
}

1) набором данных 1

private boolean useProductionUrl = false
protocol = System.getProperty("protocol") ?: "https"
baseDomain = System.getProperty("base.url") ?: "beta.com"
testPassword = System.getProperty("test.password") ?: "dontyouwish"

2) набором данных 2

private boolean useProductionUrl = true
protocol = System.getProperty("protocol") ?: "https"
baseDomain = System.getProperty("base.url") ?: "production.com"
testPassword = System.getProperty("test.password") ?: "dywyk"

1 Ответ

0 голосов
/ 26 февраля 2019

Как правило, чтобы сделать тест зависимым от данных, используйте блок where, возможно, вместе с аннотацией @Unroll.

Однако ваш случай просто не лучший пример для теста, управляемого данными.
baseDomain и protocol лучше установить в GebConfig.groovy, аналогично предоставленным вами фрагментам.Обратитесь к этому разделу в Книге Геба , поскольку это то, что вы используете.

Простой пример (в GebConfig.groovy):

environments {
  production {
    baseUrl = "https://production.com"
  }
  beta {
    baseUrl = "https://beta.com"
  }
}

Если сделаноТаким образом, ваши индивидуальные тесты не должны заботиться об окружающей среде, так как это уже встроено в Geb.Например, при переходе на страницы их базовый URL-адрес устанавливается автоматически.Вы не предоставили эту часть кода в своем примере (как определяются страницы), поэтому я не могу помочь вам с этим напрямую.

Теперь, в вашем случае, что касается "пароля"Вы могли бы прочитать это из переменной среды или системного свойства, которое вы установили близко к тому месту, где вы конфигурируете Geb с geb.env или geb.build.baseUrl системными свойствами.
Примечание. Я просто рассматриваю это по практическим соображениям, без каких-либо ограничений в отношении секретности.пароля.

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

static content = {
    //...
    passwordInput = { $('input[type="password"]') }
    //...
}

void enterPassword() {
    passwordInput.value(System.getProperty('test.password'))
}

Чтобы это работало, вам нужнозапустите тест с системными свойствами, настроенными на правильные значения.

Например, если запускать прямо из командной строки, вы добавите параметры -Dgeb.env=beta -Dtest.password=dontyouwish.Если вы запускаете из задачи Gradle, вам нужно добавить соответствующие systemProperty ключи и значения для этой задачи.При запуске из IDE обратитесь к документации IDE, чтобы узнать, как установить системные свойства Java при запуске программы.

...