Automated tests 是否可以使用GEB对集合中的每组数据运行相同的测试?

Automated tests 是否可以使用GEB对集合中的每组数据运行相同的测试?,automated-tests,spock,geb,Automated Tests,Spock,Geb,我希望将所有用户数据保存到一个集合中,并让GEB对每组数据运行相同的测试。我是这样想的 import geb.spock.GebReportingSpec import spock.lang.* class MyFirstTestSpec extends GebReportingSpec { def setupSpec() { def userData = //an array of hashes but if it work I really do not care

我希望将所有用户数据保存到一个集合中,并让GEB对每组数据运行相同的测试。我是这样想的

import geb.spock.GebReportingSpec
import spock.lang.*

class MyFirstTestSpec extends GebReportingSpec {

    def setupSpec() {
       def userData = //an array of hashes but if it work I really do not care what type of collection is used 
    }

    def 'run app'() {
    given:
            to LoginPage
            userName = 'MasterUser'
            password = 'APassword'
            login.click()
            at HomePage
    when:
    userData.each{
            to ProfilePage
            first = it['first']
            mi = it['mi']
            last = it['last']

            ...... More data
        }

    then: 'did it work'
        at ReviewPage
        amount1     == it['amount1']
        amount2     == it['amount12']

            ...... More checks 


}

}

您是否考虑过将用户数据移动到位置:

import geb.spock.GebReportingSpec
import spock.lang.*

class MyFirstTestSpec extends GebReportingSpec {

def setupSpec() {
}

def 'run app'() {
    given:
        to LoginPage
        userName = 'MasterUser'
        password = 'APassword'
        login.click()
        at HomePage
    when:
        to ProfilePage
        first = firstName
        mi = midName
        last = lastName

        ...... More data
    then: 'did it work'
        at ReviewPage

        reviewFirstName == firstName

        amount1     == amount1
        amount2     == amount12

        ...... More checks 
    where:
        firstName | midName | lastName | amount1 | amount12
        Robert    | John    | Brown    | 100     | 20
...more data

这种结构的唯一特点是每次迭代都需要启动登录过程。如果您不喜欢,那么您可以使用where:块,并将给定的:块移到setupSpec()中fixture method.

您可以在where块中运行closure,并返回执行此操作所需的每个变量的列表-然后您可以在任何位置导航,并在测试开始之前执行所需的任何预处理。