如何在Play2上使用OpenId对应用程序进行功能测试?

时间:2013-10-08 22:42:23

标签: scala playframework-2.0 playframework-2.1 playframework-2.2 fluentlenium

假设该应用受OpenId登录(仅限OpenId)保护。一旦用户通过OpenId成功进行了身份验证,我就在会话中设置了一个属性:

 Redirect(routes.Application.index).withSession('email -> userinfo.email)

现在,由于很多应用程序功能都依赖于Javascript,因此测试必须在Selenium / Fluentlenium上运行。如何在测试中伪造连接用户?

编辑:如下所述,在OpenId提供程序中创建用户实际上并不是一个有两个原因的答案:

  1. OpenID提供商仅限Google和Google。
  2. 我不想测试Google的OpenId是否有效,因为他们可能比以往更好地测试它,我想测试我的应用程序的功能。
  3. 我更愿意通过在fluentlenium中的会话中手动设置电子邮件属性来假冒连接用户,但我发现没有API可以执行此操作。

3 个答案:

答案 0 :(得分:1)

我们已经通过将OpenId集成提取到具有真实实现(谷歌)和虚拟实现的特征中来完成此操作,在我们的情况下,使用已登录的硬编码用户,这也是有用的在开发模式下使用应用程序而无需实际登录。

实际特征就像这样简单:

sealed trait AuthLogic {
  def login: Action[AnyContent]
  def callback: Action[AnyContent]
}

然后由google one和dummy实现,所使用的实际实例是在配置标志首次访问(lazy val)时决定的。所有虚拟的都是直接从登录重定向到回调,然后在回调实现中伪造一个登录。

希望这有帮助!

答案 1 :(得分:0)

为什么不在OpenId供应商中创建测试帐户并在selenium脚本中使用其用户名/密码?

在selenium / Fluentlenium中进行的测试得出的结论是,您的应用程序已经完全集成(OpenID是按照您的提法设置的,我怀疑DB也是连接的。)

答案 2 :(得分:0)

我从未使用过fluent,但我认为您可以访问底层的selenium webdriver?如果是这样,你不能只设置一个cookie吗?您只需要保存一个有效的签名会话cookie。

http://docs.seleniumhq.org/docs/03_webdriver.jsp#cookies