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

How to login before executing Geb tests

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

  1. 运行 按顺序测试(先登录,然后 运行 其他)。如何? (必须由命令触发gradle integrationTest
  2. 在每次验证我的测试之前执行 JS 脚本。如何在测试中实现?
  1. 如果它是 Web 服务,我不会使用 Geb 对其进行测试。 Geb 是一个用于驱动浏览器的工具,REST Web 服务最好使用 http 客户端进行测试,例如 REST-assured。

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

什么样的身份验证? 对于基本身份验证,请查看: 所以你可以把它添加到你的基地 url.

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

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

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")

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