我使用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
(如果我有更多用户,则会更多),所以我需要将它们分开吗?
有人会提供一些提示/解决方案来考虑吗?
答案 0 :(得分:0)
我不确定我是否理解您的确切问题,但假设它有单个浏览器进行并行运行的少数测试,因此只有一个用户登录,影响同时运行的其他测试。
一种解决方案是每次测试命名会话。不确定它是否可靠。
其他的是让您的每个进程并行运行,打开自己的浏览器,然后您就不会遇到任何会话问题。 它需要更多内存,但似乎不会影响测试速度。 而且,在每次测试之后,您可以使用reset_sessions而不是注销!在全球拆解。