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

时间:2016-12-14 18:40:58

标签: grails groovy spock geb

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

  1. 按顺序运行测试(首先登录,然后运行其他人)。怎么样? (必须通过命令gradle integrationTest
  2. 触发
  3. 在每次验证我的测试之前执行JS脚本。如何在测试中实现这一点?

2 个答案:

答案 0 :(得分:2)

  1. 如果是网络服务,我不会使用Geb进行测试。 Geb是一个用于驱动浏览器的工具,REST Web服务最好使用http客户端进行测试,如REST保证。

  2. 我会在应用程序中配置身份验证,并在大多数测试中禁用它,而不是明确测试身份验证的测试。

答案 1 :(得分:2)

什么样的身份验证? 对于基本身份验证,请查看: HTTP Basic Authentication credentials passed in URL and encryption 所以你可以把它添加到你的基本网址。

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

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

class BaseClass extends GebSpec {
    def setupSpec() {
        <loginProcess>
    }
}

@Stepwise
class ASpec extends BaseClass {
    testMethod() { }
}

@Stepwise
class BSpec extends BaseClass {
    testMethod() { }
}

请注意,这将在一个额外的时间执行登录过程,因为它也发生在BaseClass中。 我用

if (this.getClass().getPackage().getName() != "gebMethods")

块解决了这个问题,但我想可能会有更优雅的解决方案。