如何实施 Spock 参数化测试最佳实践?
How to implement Spock Parameterized test best practice?
我有一个测试规范,可以是 运行 具有唯一数据集的。对此的最佳做法有点不清楚。下面的代码应该如何修改为 运行 with:
@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"
通常,要使测试依赖于数据,请使用 where
块,可能与 @Unroll
注释一起使用。
但是,您的案例根本不是数据驱动测试的最佳示例。
baseDomain
和 protocol
应该设置在 GebConfig.groovy
中,类似于您提供的片段。
请参考 this section in the Book of Geb,因为这就是您正在使用的。
简单示例(在GebConfig.groovy中):
environments {
production {
baseUrl = "https://production.com"
}
beta {
baseUrl = "https://beta.com"
}
}
如果这样做,您的个人测试不需要关心环境,因为这已经内置到 Geb 中。
例如,当导航到页面时,它们的基数 URL 会自动设置。
你没有在你的例子中提供那部分代码(页面是如何定义的),所以我不能直接帮助你。
现在,就你的情况而言,就 "password" 而言,你可以从环境变量或系统 属性 中读取它,你将其设置为接近你配置 Geb 的位置 geb.env
或 geb.build.baseUrl
系统属性。
请注意,我只是出于实际原因考虑这一点,而不考虑密码的保密性。
您将在使用它的页面 class 中选择变量。
第 class 页中的示例代码:
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 系统属性。
我有一个测试规范,可以是 运行 具有唯一数据集的。对此的最佳做法有点不清楚。下面的代码应该如何修改为 运行 with:
@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"
通常,要使测试依赖于数据,请使用 where
块,可能与 @Unroll
注释一起使用。
但是,您的案例根本不是数据驱动测试的最佳示例。
baseDomain
和 protocol
应该设置在 GebConfig.groovy
中,类似于您提供的片段。
请参考 this section in the Book of Geb,因为这就是您正在使用的。
简单示例(在GebConfig.groovy中):
environments {
production {
baseUrl = "https://production.com"
}
beta {
baseUrl = "https://beta.com"
}
}
如果这样做,您的个人测试不需要关心环境,因为这已经内置到 Geb 中。 例如,当导航到页面时,它们的基数 URL 会自动设置。 你没有在你的例子中提供那部分代码(页面是如何定义的),所以我不能直接帮助你。
现在,就你的情况而言,就 "password" 而言,你可以从环境变量或系统 属性 中读取它,你将其设置为接近你配置 Geb 的位置 geb.env
或 geb.build.baseUrl
系统属性。
请注意,我只是出于实际原因考虑这一点,而不考虑密码的保密性。
您将在使用它的页面 class 中选择变量。
第 class 页中的示例代码:
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 系统属性。