如何实施 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 注释一起使用。

但是,您的案例根本不是数据驱动测试的最佳示例。
baseDomainprotocol 应该设置在 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.envgeb.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 系统属性。