2015-01-21 20 views
3

的去testing包定義a Parallel() function將t.Parallel()放在我的測試頂部的實際好處是什麼?

並行信號,這個測試是與(並只與)其它平行試驗並行地運行。

但是,當我搜索爲標準庫編寫的測試時,我發現這個函數只有幾個用途。

我的測試速度非常快,一般不會依賴變異共享狀態,所以我一直在添加這個,認爲它會導致加速。但它沒有在標準庫中使用的事實讓我停下來。將t.Parallel()添加到您的測試中有什麼實際好處?

回答

3

這似乎已經提出第一個on the golang-dev group

初始請求狀態:

「我想添加爲平行gotest運行測試的選項 我的動機來自於運行Selenium測試,每個測試是彼此非常獨立。但他們需要時間。「

該線程包含實際效益的討論。

這真的只是讓你能夠同時運行不相關的,長期運行的測試。它不是一個真正的標準庫使用的幾乎所有的功能,必須儘可能快地(一些加密異常等)

有進一步的討論here和承諾是here

+0

好找,方法來打我一拳! :) +1 – weberc2 2015-01-21 04:47:32

+0

@ weberc2我認爲你的答案爲std lib中缺乏普遍性提供了更好的理由。第二個引用幾乎總結了爲什麼他們沒有通過std lib測試並將它們「並行化」。 – Intermernet 2015-01-21 04:53:12

5

This thread(其中t.Parallel是構思和討論的)表示t.Parallel()僅用於慢速測試;平均測試速度如此之快以至於從並行執行中獲得的任何收益都可以忽略不計。

這裏有一些報價(僅拉斯,但沒有太多的反對):

Russ Cox [link]:

有關於正確的默認選項是一些問題。 我們的大部分測試運行速度非常快,以至於不需要對其進行並行處理。我認爲這可能是正確的模式, 這將表明並行化是例外, 不是規則。 作爲一個例外,這可以通過測試可以調用以聲明可以與其他測試並行運行的方法 t.Parallel() 來適應。

拉斯考克斯再次[link]:

非平行測試應該是快速的。他們是無足輕重的。 如果兩次測試都很慢,那麼你可以t。如果它困擾你,請將它們並行。如果一次測試很慢,那麼一次測試很慢。

相關問題