首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单点登录页面的集成测试

单点登录页面的集成测试
EN

Stack Overflow用户
提问于 2011-07-13 00:25:07
回答 1查看 5K关注 0票数 4

如何在integration tests期间使用单点登录(例如,使用caybara或cucumber)测试页面?对于普通登录,您需要编写一个访问登录页面、填写表单并提交表单的方法。如果登录表单来自外部SSO服务器,比如Shibboleth或OpenAM/OpenSSO,这就有点困难了。如何为受SSO保护的页面编写集成测试?

一个类似的问题是使用单独的搜索服务器(Solr或Sphinx)进行集成测试。您可能会通过使用某种形式的模拟或存根来解决它。谁能给出一个很好的例子,如何模拟或存根黄瓜或水豚的SSO?如果这太难了,那么搜索服务器的一个类似示例也会很有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-26 17:24:09

SSO应用程序的集成测试是一个更一般问题的特例:测试分布式应用程序。这是一个困难的问题,似乎没有灵丹妙药。有多种方法可以组合一组不同的服务器或服务,并将它们作为一个整体进行测试。两个极端是

a)测试整个系统的一个实例。然后,您不需要任何模拟或存根,但您需要一个完整的、成熟的整个堆栈设置。这包括所涉及的每个服务器的运行实例。对于每一次测试,设置整个应用程序堆栈,并测试整个堆栈,即将所有涉及的组件作为一个整体测试整个分布式系统,这通常是困难的。只有当每个组件和所有连接都正常工作时,整个事情才能正常工作。

b)为每个组件编写集成测试,将其视为黑盒,并通过mock和stub来覆盖缺失的连接。在实践中,这种方法更常见于单元测试,人们为每个MVC层编写测试:模型、视图和控制器(视图和控制器通常一起)。

在这两种情况下,您都没有考虑到断开的连接。原则上,必须检查每个外部服务器/服务的以下可能性

  • 已关闭
  • 已启动且运行良好
  • 已启动并错误响应
  • 已启动,但您向其发送了错误的数据

<代码>F29

基本上,分布式应用程序的测试是困难的。这就是为什么distributed applications are hard to develop。分布式应用程序的部件和服务器越多,就越难设置许多成熟的环境,如生产、升级、测试和开发。系统越大,集成测试就变得越困难。在实践中,人们使用第一种方法,并创建整个应用程序的一个小但完整的版本。典型的简单设置是App Server + DB Server + Search Server。在您的开发计算机上,您将拥有一个完整系统的两个不同版本:

具有多个数据库的

  • One DB服务器(开发和测试)
  • 具有多个索引的One Search服务器(开发和测试)

用于搜索服务器的常见Ruby插件(考虑Sphinx for Sphinx或Sunspot for Solr)支持cucumber和集成测试。他们为你测试的某些部分“打开”搜索服务器。对于不使用搜索服务器的代码,它们会“存根”服务器或模拟连接,以避免不需要的索引。

对于RSpec测试,可以存根出身份验证方法,例如,对于控制器测试,可以通过

代码语言:javascript
复制
  before :each do
    @current_user = Factory(:user)
    controller.stub!(:current_user).and_return(@current_user)
    controller.stub!(:logged_in?).and_return(:true)
  end

它也适用于帮助器和视图测试,但不适用于RSpec请求或集成测试。

对于cucumber测试,可以通过将到搜索服务器的连接替换为存根来清除搜索服务器(对于Sunspot和Solr,这可以通过封装到Solr的连接的replacing the Sunspot.session来完成)。

这一切听起来都很好,但不幸的是,将此解决方案移植到SSO服务器上有点困难。典型的最小设置是App Server + DB Server + SSO Server。完整的集成测试意味着我们必须设置一个具有多个用户数据存储(开发和测试)的SSO服务器。设置SSO服务器已经够难的了,设置一个具有多个用户数据存储的SSO服务器可能不是一个很好的主意。

这个问题的一个可能的解决方案可能是在Fakeweb的方向上。FakeWeb是布莱恩·库克为伪造web请求而编写的Ruby库。它允许您将测试环境与活动服务解耦。不幸的是,伪造SSO服务器的响应有点困难。

我最终使用的另一个可能的解决方案是使用fake login,即添加一个可以在集成测试中调用的假登录方法。这个假登录是仅在测试期间添加的动态方法(通过猴子补丁的形式)。这有点乱七八糟,但似乎很管用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6667625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档