我有基于Grails的REST web服务。在您可以访问除登录之外的任何页面之前,必须进行强制身份验证。 我用Geb& Spock用于集成测试,通过Gradle运行。我的问题是:如何在执行任何测试之前提供身份验证? 我有两个想法:
gradle integrationTest
)答案 0 :(得分:2)
如果是网络服务,我不会使用Geb进行测试。 Geb是一个用于驱动浏览器的工具,REST Web服务最好使用http客户端进行测试,如REST保证。
我会在应用程序中配置身份验证,并在大多数测试中禁用它,而不是明确测试身份验证的测试。
答案 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")
块解决了这个问题,但我想可能会有更优雅的解决方案。