2015-05-28 160 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) 

這對多個並行測試非常有效