2013-09-05 1 views
5

У меня есть набор тестов Spec, которые я выполняю в проекте Grails.Выполнение конкретных тестов Geb в соответствии с environement

Мне нужно выполнить определенный набор спецификаций, когда я нахожусь на локальном, и еще один набор Spec, когда я запускаю среду pre-prod. Моя текущая конфигурация выполняет все мои спецификации одновременно для обоих environements, чего я хочу избежать.

У меня есть несколько условий, которые я настроил в моем GebConfig:

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

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

} 

ответ

4

Вы можете использовать файл конфигурации Спока.

Создание аннотаций для двух видов испытаний - @Local и @PreProd, например, в Groovy:

import java.lang.annotation 

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

Следующий шаг заключается в аннотировать спецификации соответственно, например:

@Local 
class SpecificationThatRunsLocally extends GebSpec { ... } 

Затем создать a SpockConfig.groovy файл рядом с вашим GebConfig.groovy файл со следующим содержанием:

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

EDIT: Похоже, что Grails использует собственный тестовый бегун, что означает, что SpockConfig.groovy не учитывается при выполнении спецификаций от Grails. Если вам нужно, чтобы он работал под Grails, вам следует использовать @ IgnoreIf/@ Требовать встроенные аннотации расширений Spock.

Сначала создайте класс Closure с логикой для того, когда данный параметр должен быть включен. Вы можете поместить логику непосредственно в качестве аргумента замыкания в аннотации расширения, но может раздражать, чтобы скопировать этот бит кода повсюду, если вы хотите комментировать многие спецификации.

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 { ... } 
+0

Спасибо ERDI для вас ответ, но как я могу создавать аннотации, пожалуйста, у вас есть примеры? Tx – ErEcTuS

+0

См. Мой обновленный ответ – erdi

+0

erdi, мой SockConfig не «замечен» моим приложением grails..и я положил его в тот же пакет, что и gebConfig. Во время отладки код внутри spockconfig никогда не был достигнут – ErEcTuS

 Смежные вопросы

  • Нет связанных вопросов^_^