testing - 根据环境执行特定的 Geb 测试

标签 testing grails spock geb

我在 Grails 项目中执行了一组规范测试。

当我在本地时,我需要执行一组特定的规范,而当我运行预生产环境时,我需要执行另一组规范。 我当前的配置同时针对两个环境执行我的所有规范,这是我想避免的事情。

我在 GebConfig 中配置了多个环境:

environments {
    local {
        baseUrl = "http://localhost:8090/myApp/login/auth"
    }

    pre-prod {
        baseUrl = "https://preprod/myApp/login/auth"
    }

}

最佳答案

您可以使用 spock 配置文件。

为两种类型的测试创建注释 - @Local@PreProd,例如在 Groovy 中:

import java.lang.annotation

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

下一步是相应地注释您的规范,例如:

@Local
class SpecificationThatRunsLocally extends GebSpec { ... }

然后在 GebConfig.groovy 文件旁边创建一个 SpockConfig.groovy 文件,内容如下:

def gebEnv = System.getProperty("geb.env")
if (gebEnv) {
    switch(gebEnv) {
        case 'local':
            runner { include Local }
            break
        case 'pre-prod':
            runner { include PreProd }
            break 
    }
}

编辑:看起来 Grails 正在使用它自己的测试运行器,这意味着在从 Grails 运行规范时不考虑 SpockConfig.groovy。如果您需要它在 Grails 下工作,那么您应该使用 @IgnoreIf/@Require 内置的 Spock 扩展注释。

首先创建一个闭包类,其中包含何时应启用给定规范的逻辑。您可以将逻辑直接作为扩展注释的闭包参数,但如果您想注释大量规范,将那段代码复制到各处可能会很烦人。

class Local extends Closure<Boolean> {
    public Local() { super(null) }
    Boolean doCall() {
        System.properties['geb.env'] == 'local'
    }
} 

class PreProd extends Closure<Boolean> {
    public PreProd() { super(null) }
    Boolean doCall() {
        System.properties['geb.env'] == 'pre-prod'
    }
}

然后注释您的规范:

@Requires(Local)
class SpecificationThatRunsLocally extends GebSpec { ... }

@Requires(PreProd)
class SpecificationThatRunsInPreProd extends GebSpec { ... }

关于testing - 根据环境执行特定的 Geb 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636421/

相关文章:

spring - Datasource.groovy 在应用程序上下文加载之前执行?

unit-testing - 为什么将空字符串转换为 null 传递给 Grails 2.4.0 中域对象的构造函数?

unit-testing - Emberjs 测试组件的 Action 委托(delegate)

android - 选择 Android 构建作为 Android 测试项目的构建目标时,Eclipse 获取 NullPointerException

java - 域类中的 Groovy 映射与表关系 - 如何描述和持久化?

mocking - 在 Spock 中模拟最后一个类

java - 通过 gradle 运行特定的@Issue

android 测试目录中的 Activity

testing - 屏幕分辨率测试

grails - Grails-CreateCriteria检索包含查询中任何元素的任何条目