2015-05-28 122 views
0

我正在寻找一些协助,从哪里开始与黄瓜/水豚同时进行测试。我需要这样做,而不需要'parallel_tests'gem.the原因是我似乎无法为每个进程分别登录用户。运行并发测试黄瓜/水豚

我在想我可以拥有一个共享的用户池,很可能在一个数组中,但我无法通过单独的进程与gem共享这些数据。

我收到的一些反馈意见是使用IO.pipe,但至今还不够了解。

我有一个独立的黄瓜框架,没有护栏等

有没有人成功地实现这一点?

任何帮助,将不胜感激

+0

我已经在使用rake multitask之前完成了这项工作,但我认为这种方法只有在您明智地将测试划分为单独的情况下才有意义耙子任务。例如并行运行不同平板电脑上的全套测试或在不同浏览器中运行测试。如果你只是想加快测试速度,那么你最终会随意将你的套件分成几块,这不是很好/不会很好地扩展。想要并行运行的上下文是什么? – alannichols

+0

理想情况下,我想一次运行2/3个功能,每个功能都将以不同的用户身份登录(使用sso),因此不能有相同的用户登录两次。需要有一个用户池,并且可以跨多个进程共享。那有意义吗? parrallel_tests确实似乎分叉了它的进程,但不知道如何设置管道以共享数据 – Richlewis

+0

如果在所有测试中使用Thread.current ['USER']作为变量,那么您可以在您的每个线程中设置它挂钩之前。如果您将用户池设置为全局或env变量,则可以从中收集用户名。如果你想循环它们,你可以把它们放在一个带有另一个var的数组中,以标记它们在使用或不使用,并让你的钩子选择第一个未使用的。 – alannichols

回答

0

想我会后我的解决方案的情况下,它可以帮助别人。我最终将用户池从应用程序中分离出来,并使用Redis来存储它们。

然后我有一个简单的方法,这将挑选一组在Redis的随机用户,并把它放回一旦它已经完成了它

def choose_redis_user 
    @redis = Redis.new 
    @randUser = @redis.spop("users") 
    $user_username = @redis.hget(@randUser, "username") 
    $user_password = @redis.hget(@randUser, "password") 
end 

def return_redis_user 
    @redis.sadd("users", @randUser) 
end 

然后我的测试中,我可以运行

login_page.username.set($user_username) 
login_page.password.set($user_password) 

这对多个并行测试非常有效