如何实现Spock参数化测试最佳实践?

时间:2019-02-25 23:15:31

标签: spock shared unroll

我有一个测试规范,可以与唯一的数据集一起运行。最佳做法尚不清楚。如何修改下面的代码以使其运行:

@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 :(得分:0)

通常,要使测试依赖数据,请使用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。 您没有在示例中提供那部分代码(页面的定义方式),所以我不能直接为您提供帮助。

现在,就您的情况而言,就“密码”而言,您可以从环境变量或系统属性中读取到您设置为使用geb.env或{{1 }}系统属性。
请注意,出于实际原因,我只是在考虑这一点,而不考虑密码的保密性。

您将在使用它的页面类中选择该变量。
页面类中的示例代码:

geb.build.baseUrl

要执行此操作,您需要在将系统属性设置为正确值的情况下开始测试。

例如如果直接从命令行启动,则将添加参数static content = { //... passwordInput = { $('input[type="password"]') } //... } void enterPassword() { passwordInput.value(System.getProperty('test.password')) } 。 如果从Gradle任务运行,则需要向该任务添加适当的-Dgeb.env=beta -Dtest.password=dontyouwish键和值。 如果是从IDE运行,请参阅您的IDE文档,以了解运行程序时如何设置Java系统属性。