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