Как внедрить передовые методы Spock Parameterized test?

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

@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 ответ

Решение

Как правило, чтобы тест зависел от данных, используйте 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 при запуске программы.

Другие вопросы по тегам