在Geb中指定多个环境

时间:2018-07-22 07:46:11

标签: geb

我正在一个项目中使用三个不同的部署环境。它们之间的区别只是URL不同。所以我的问题是:“有可能做这样的事情吗?”

browsers {
  chrome {
    driver = {
      new ChromeDriver()
    }
  }
  firefox {
    driver = {
    new FirefoxDriver();
    }
  }
} 

environments {
  development {
    baseUrl = "https://baseUrl.dev"
  }
  staging {
    baseUrl = "https://baseUrl.stage"
  }
  production {
    baseUrl = "https://baseUrl.prod"
  }
}

为了能够像这样运行我的测试:gradle test -Dgeb.env="development" -Dgeb.browser="chrome"而不是这样:

environments {
  developmentChrome {
    driver = {
      new ChromeDriver();
    }
    baseUrl = "https://baseUrl.dev"
  }
  stagingChrome {
    driver = {
      new ChromeDriver();
    }
    baseUrl = "https://baseUrl.stage"
  }
  productionChrome {
    driver = {
      new ChromeDriver();
    }
    baseUrl = "https://baseUrl.prod"
  }

  developmentFirefox {
    driver = {
      new FirefoxDriver();
    }
    baseUrl = "https://baseUrl.dev"
  }
  stagingFirefox {
    driver = {
      new FirefoxDriver();
    }
    baseUrl = "https://baseUrl.stage"
  }
  productionFirefox {
    driver = {
      new FirefoxDriver();
    }
    baseUrl = "https://baseUrl.prod"
  }
}

并像这样运行它们:gradle test -Dgeb.env="productionFirefox"

4 个答案:

答案 0 :(得分:1)

我的建议是坚持使用Geb约定,并使用geb.env确定要实例化哪种类型的浏览器驱动程序。根据{{​​3}}(滚动至第7.2.4节),您可以使用系统属性geb.build.baseUrl直接配置基本URL。您可以从Maven或Gradle脚本轻松地做到这一点,而不必将该逻辑放入GebConfig中。如果您坚持认为,您仍然可以将该属性或任何其他自制属性设置为符号值,并通过一点点手动编码在GebConfig中进行解析。请记住,您可以在那里使用任何类型的Groovy代码,例如Groovy强大的documentation。这样,您还可以实现非直观的逻辑,即将geb.env用于部署环境,将geb.browser用于驱动程序。但是正如我说的那样:遵循Geb约定对于以后必须理解或维护您的代码的人可能会更好。

如果有任何不清楚的地方,随时提出后续问题。

答案 1 :(得分:1)

我执行了以下操作,然后您可以运行它:

./gradlew dev-chromeTest 

我希望从geb示例项目获得build.gradle: https://github.com/geb/geb-example-gradle/blob/master/build.gradle

然后在驱动程序数组下面添加一个带有基本URL的数组:

drivers = ["chrome", "firefox"]
baseUrls = [
    [name: "dev", url: "http://dev-url.com/"],
    [name: "beta", url: "http://beta-url.com/"],
]

我对任务部分进行了以下修改:

baseUrls.each { entry ->
    drivers.each { driver ->
        task "${entry.name}-${driver}Test"(type: Test) {
            group JavaBasePlugin.VERIFICATION_GROUP

            outputs.upToDateWhen { false }  // Always run tests

            systemProperty "geb.build.reportsDir", reporting.file("geb/$name")
            systemProperty "geb.env", driver
            systemProperty "geb.build.baseUrl", entry.url
        }
    }
}

和测试部分这样:

test {
    dependsOn drivers.collect { baseUrls.each{ entry -> tasks["${entry.name}-${it}Test"]} }
    enabled = false
}

最后,您可以运行测试,例如:

./gradlew dev-chromeTest 

./gradlew beta-chromeTest

答案 2 :(得分:0)

假设您还在使用Spock。这就是我处理多种环境的方式...

Geb配置:

如果未将其默认设置为“ chrome”,请使用DriverFactory类基于浏览器属性(-Dbrowser)创建驱动程序。

baseUrl是基于给定的-Dgeb.env值设置的。

driver = DriverFactory.createDriver(System.getProperty("browser", "chrome"))

environments {
    dev {
        baseUrl = "https://myDevUrl/"
    }
    qa {
        baseUrl = "https://myQaEnvironmentUrl"
        }
    }
    local {
        baseUrl = "https://mylocalurl/"
    }
}

在单独的类中创建注释,以注释要在特定环境中运行的测试:

import java.lang.annotation.*

@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE, ElementType.METHOD])
@Inherited
@interface dev {}

@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE, ElementType.METHOD])
@Inherited
@interface qa {}

将以下内容添加到SpockConfig中,以便运行正确的测试:

def environments = [dev: dev, qa: qa, local: dev]

def gebEnv = System.getProperty("geb.env")

if (gebEnv) {
    runner {
        include environments[gebEnv]
    }
}

像这样注释所有测试类:

@dev @qa
class ExampleSpec extends BaseGebSpec {


    def "A test to be run on dev and qa"() {

        given: "Some stuff"

           //Some code

        when: "Do some stuff"

            //More code

        then: "Stuff happens"

            //Assertion code
    }
}

因此,现在您应该能够在特定的环境/浏览器中运行特定的测试。

答案 3 :(得分:0)

@拉什比

我尝试过使您的响应生效的方法,当然是geb的初学者,但是假设在一个环境中具有不同的url,并且每种环境具有不同的数据源,例如 DEV环境“ https://finandepartment-dev.test.com”,“ https://hrdepartment-dev.test.com” 质量检查环境“ https://finandepartment-qa.test.com”,“ https://hrdepartment-qa.test.com”

和DEV环境具有dev数据库连接,QA环境具有QA数据库连接,在基于环境运行测试时如何配置环境,我可能必须同时使用url(财务和HR)测试可能是从一个网址获取数据并在另一个网址上使用数据,例如API测试。非常感谢您的答复(可能的解决方案)