Grails 如何在执行Geb测试之前登录

Grails 如何在执行Geb测试之前登录,grails,groovy,spock,geb,Grails,Groovy,Spock,Geb,我有基于Grails的RESTWebService。在您可以访问除登录之外的任何页面之前,都有强制身份验证。 我使用Geb&Spock进行集成测试,在Gradle中运行。我的问题是:如何在执行任何测试之前提供身份验证? 我有两个想法: 按顺序运行测试(先登录,然后运行其他测试)。怎么用?(必须通过命令gradle integrationTest触发) 在每次验证我的测试之前执行JS脚本。如何在测试中实现这一点 如果它是一个web服务,我不会使用Geb来测试它。Geb是一种驱动浏览器的工具,RES

我有基于Grails的RESTWebService。在您可以访问除登录之外的任何页面之前,都有强制身份验证。 我使用Geb&Spock进行集成测试,在Gradle中运行。我的问题是:如何在执行任何测试之前提供身份验证? 我有两个想法:

  • 按顺序运行测试(先登录,然后运行其他测试)。怎么用?(必须通过命令
    gradle integrationTest
    触发)
  • 在每次验证我的测试之前执行JS脚本。如何在测试中实现这一点
  • 如果它是一个web服务,我不会使用Geb来测试它。Geb是一种驱动浏览器的工具,REST web服务最好使用http客户机(如REST assured)进行测试

  • 我将在应用程序中配置身份验证,并在除显式测试身份验证的测试之外的大多数测试中禁用它

  • 如果它是一个web服务,我不会使用Geb来测试它。Geb是一种驱动浏览器的工具,REST web服务最好使用http客户机(如REST assured)进行测试

  • 我将在应用程序中配置身份验证,并在除显式测试身份验证的测试之外的大多数测试中禁用它


  • 什么样的认证? 有关基本身份验证,请查看: 因此,您可以将其添加到您的基本url

    如果必须完成登录过程,可以使用
    setupSpec()
    setup
    方法。前者在其他任何事情发生之前执行,后者在每个单独的测试方法之前执行

    您可以使用@Stepwise符号来阻止在测试方法之间删除cookie。 如果您有不同的geb类,并且希望所有这些类都在setup或setupSpec方法的前面,请使用extends表示法:

    class BaseClass extends GebSpec {
        def setupSpec() {
            <loginProcess>
        }
    }
    
    @Stepwise
    class ASpec extends BaseClass {
        testMethod() { }
    }
    
    @Stepwise
    class BSpec extends BaseClass {
        testMethod() { }
    }
    
    class基类扩展了GebSpec{
    def setupSpec(){
    }
    }
    @逐步的
    类ASpec扩展了基类{
    testMethod(){}
    }
    @逐步的
    类BSpec扩展了基类{
    testMethod(){}
    }
    
    注意,这将额外执行一次登录过程,因为它也发生在基类中。
    我使用了一个
    if(this.getClass().getPackage().getName()!=“gebMethods”)
    块解决了这个问题,但我想可能有一个更优雅的解决方案。

    什么样的身份验证? 有关基本身份验证,请查看: 因此,您可以将其添加到您的基本url

    如果必须完成登录过程,可以使用
    setupSpec()
    setup
    方法。前者在其他任何事情发生之前执行,后者在每个单独的测试方法之前执行

    您可以使用@Stepwise符号来阻止在测试方法之间删除cookie。 如果您有不同的geb类,并且希望所有这些类都在setup或setupSpec方法的前面,请使用extends表示法:

    class BaseClass extends GebSpec {
        def setupSpec() {
            <loginProcess>
        }
    }
    
    @Stepwise
    class ASpec extends BaseClass {
        testMethod() { }
    }
    
    @Stepwise
    class BSpec extends BaseClass {
        testMethod() { }
    }
    
    class基类扩展了GebSpec{
    def setupSpec(){
    }
    }
    @逐步的
    类ASpec扩展了基类{
    testMethod(){}
    }
    @逐步的
    类BSpec扩展了基类{
    testMethod(){}
    }
    
    注意,这将额外执行一次登录过程,因为它也发生在基类中。 我使用了一个
    if(this.getClass().getPackage().getName()!=“gebMethods”)
    块解决了这个问题,但我想可能有一个更优雅的解决方案