在Ruby和Capybara中跟踪会话

时间:2015-05-27 09:48:53

标签: ruby session cucumber capybara

我使用parallel_tests gem可以同时运行多个功能,我面对的问题是我有基于用户的会话(SSO)所以只有一个用户可以登录一次。

为了解决这个问题,我想能够随机选择用户是否可用,但全球跟踪他们的login状态对我来说是一个问题。

我的设置

用户将在每个方案之前和之后登录:

Before('@login_automated_user') do
  @user = FactoryGirl.attributes_for(:automated_user)
 login_steps("#{APP}")
end

After('@login_automated_user') do
 logout_steps
end

我在考虑在数组中拥有一个用户池并随机选择一个用户,一旦完成将用户返回到池中:

module UserSession
  def choose_user
    user_array = factory_girl_users.values
    if user_array.length > 0
     @user = user_array.pop
   end
  end

   def return_user
     user_array << @user
   end

  def factory_girl_users
    Hash[:user_1 => FactoryGirl.attributes_for(:automated_user), :user_2 => FactoryGirl.attributes_for(:automated_user_1)]
 end
end
World(UserSession)

这将使我的Before和After钩子看起来像:

Before('@login_automated_user') do
 @user = choose_user
 login_steps("#{APP}")
end

After('@login_automated_user') do
 logout_steps
 return_user
end

我在这里看到的一个问题是,我在两个会话中使用@user(如果我有更多用户,则会更多),所以我需要将它们分开吗?

有人会提供一些提示/解决方案来考虑吗?

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的确切问题,但假设它有单个浏览器进行并行运行的少数测试,因此只有一个用户登录,影响同时运行的其他测试。

一种解决方案是每次测试命名会话。不确定它是否可靠。

其他的是让您的每个进程并行运行,打开自己的浏览器,然后您就不会遇到任何会话问题。 它需要更多内存,但似乎不会影响测试速度。 而且,在每次测试之后,您可以使用reset_sessions而不是注销!在全球拆解。