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

Cucumber 单点登录页面的集成测试,cucumber,integration-testing,single-sign-on,capybara,opensso,Cucumber,Integration Testing,Single Sign On,Capybara,Opensso,您如何使用单点登录(SSO)登录测试页面(例如使用caybara或cucumber)?对于普通登录,您将编写一个访问登录页面、填写表单并提交表单的方法。如果登录表单来自Shibboleth或OpenAM/OpenSSO等外部SSO服务器,则这有点困难。如何为受SSO保护的页面编写集成测试 类似的问题是使用单独的搜索服务器(Solr或Sphinx)进行集成测试。您可能会通过使用某种形式的模拟或存根来解决它。有人能举一个很好的例子,如何为cucumber或capybara模拟或存根SSO吗?如果这太

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


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

SSO应用程序的集成测试 更一般问题的特例:测试 分布式应用程序。这是一个困难的问题 这个问题似乎并没有什么魔力 子弹。有多种方法可以组合 一组不同的服务器或服务,并对其进行测试 作为一个整体。两个极端是

a) 测试整个系统的一个实例。你不知道 需要任何模拟或存根,但你需要 整个堆栈的完整、成熟的设置。这包括 所涉及的每台服务器的运行实例。 对于每个测试,设置整个应用程序堆栈, 并测试整个堆栈,即测试 整个分布式系统作为一个整体,包括所有 涉及的组件,这是很困难的 一般来说这整件事只有在每个 组件和所有连接工作正常

b) 为每个组件编写一个集成测试, 将其视为一个黑匣子,并覆盖 模拟和存根缺少连接。 在实践中,这种方法更常见于 单元测试,一个为每个单元编写测试 MVC层:模型、视图和控制器 (视图和控制器经常在一起)

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

  • 下跌
  • 他起床了,行为良好
  • 他站起来回答错了
  • 已启动,但您发送了错误的数据
基本上,测试分布式应用程序是困难的。 这是原因之一。 一个分布式应用程序拥有的部件和服务器越多,就越难设置许多成熟的环境,如生产、登台、测试和开发。 系统越大,越困难 集成测试变得越来越重要。实际上,, 一个使用第一种方法并创建一个小的 但是整个应用程序的完整版本。 典型的简单设置是App Server+DB Server+Search Server。 在您的开发机器上,您将 完整系统的两个不同版本:

  • 一台数据库服务器,带多个数据库(开发和测试)
  • 一个具有多个索引的搜索服务器(开发和测试)
搜索服务器的常见Ruby插件(考虑Sphinx for Sphinx 或太阳黑子为Solr)支持和集成 测验。他们“打开”搜索服务器,搜索特定部分的内容 你的测试。对于不使用搜索服务器的代码, 他们“存根”服务器或模拟连接以避免不必要的连接 索引

对于RSpec测试,这是可能的 要删除身份验证方法, 例如,对于控制器测试

  before :each do
    @current_user = Factory(:user)
    controller.stub!(:current_user).and_return(@current_user)
    controller.stub!(:logged_in?).and_return(:true)
  end
它也适用于帮助器和视图测试,但是 不适用于RSpec请求或集成测试

对于黄瓜测试,可以使用树桩 通过替换连接退出搜索服务器 到带有存根的搜索服务器(用于太阳黑子和 Solr这可以通过, 它封装了到Solr的连接)

这一切听起来都很好,不幸的是这有点难以理解 为SSO服务器传输此解决方案。典型的极小值 安装程序将是App Server+DB Server+SSO Server。 完整的集成测试意味着我们必须使用 多用户数据存储(开发和测试)。 设置SSO服务器已经够难了, 使用多用户数据设置SSO服务器 商店可能不是个好主意

解决这个问题的一个可能办法是在 方向。FakeWeb是一个Ruby库,由 布莱恩·库克伪造网络请求。它可以让你解耦 您的测试环境来自live services。假装回答 不幸的是,SSO服务器的配置有点困难

我最后使用的另一个可能的解决方案是使用。 添加可在集成中调用的假登录方法 测试。此假登录是一种动态方法,仅在登录过程中添加 测试(通过猴子修补的形式)。这有点乱,但是 它似乎起作用了