如何在执行 Geb 测试之前登录
How to login before executing Geb tests
我有基于 Grails 的 REST 网络服务。在您访问除登录以外的任何页面之前,必须进行身份验证。
我使用 Geb & Spock 进行集成测试,从 运行 一直到 Gradle。我的问题是:如何在执行任何测试之前提供身份验证?
我有两个想法:
- 运行 按顺序测试(先登录,然后 运行 其他)。如何? (必须由命令触发
gradle integrationTest
)
- 在每次验证我的测试之前执行 JS 脚本。如何在测试中实现?
如果它是 Web 服务,我不会使用 Geb 对其进行测试。 Geb 是一个用于驱动浏览器的工具,REST Web 服务最好使用 http 客户端进行测试,例如 REST-assured。
我会在应用程序中配置身份验证,并在除了明确测试身份验证的测试之外的大多数测试中禁用它。
什么样的身份验证?
对于基本身份验证,请查看:
所以你可以把它添加到你的基地 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")
块解决了这个问题,但我想可能会有更优雅的解决方案。
我有基于 Grails 的 REST 网络服务。在您访问除登录以外的任何页面之前,必须进行身份验证。 我使用 Geb & Spock 进行集成测试,从 运行 一直到 Gradle。我的问题是:如何在执行任何测试之前提供身份验证? 我有两个想法:
- 运行 按顺序测试(先登录,然后 运行 其他)。如何? (必须由命令触发
gradle integrationTest
) - 在每次验证我的测试之前执行 JS 脚本。如何在测试中实现?
如果它是 Web 服务,我不会使用 Geb 对其进行测试。 Geb 是一个用于驱动浏览器的工具,REST Web 服务最好使用 http 客户端进行测试,例如 REST-assured。
我会在应用程序中配置身份验证,并在除了明确测试身份验证的测试之外的大多数测试中禁用它。
什么样的身份验证? 对于基本身份验证,请查看: 所以你可以把它添加到你的基地 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")
块解决了这个问题,但我想可能会有更优雅的解决方案。