我有一個Python單元測試像下面,我想運行的時間如何運行單元測試蟒蛇N多的時間
class Test(TestCase)
def test_0(self):
.........
.........
.........
Test.Run(name=__name__)
任何建議,因此整個試驗N號碼?
我有一個Python單元測試像下面,我想運行的時間如何運行單元測試蟒蛇N多的時間
class Test(TestCase)
def test_0(self):
.........
.........
.........
Test.Run(name=__name__)
任何建議,因此整個試驗N號碼?
您可以使用參數化測試。有不同的模塊可以做到這一點。我使用鼻子來運行我的unittests(比默認的unittest模塊更強大),並且有一個名爲nose-parameterized的包,它允許您編寫一個工廠測試,並使用不同的值運行多次,以獲得所需的變量。 如果您不想使用鼻子,還有其他幾種運行參數化測試的選項。
或者,您可以在單個測試中執行任意數量的測試條件(只要一次測試失敗,測試將報告錯誤)。在你的特定情況下,這可能比參數化測試更有意義,因爲實際上它只是一個測試,只是需要大量的函數運行才能達到某種程度的信心,以確保它正常工作。所以,你可以這樣做:
import random
class Test(TestCase)
def test_myfunc(self):
for _ in range(100):
input = random.random()
self.assertEquals(input, input + 2)
Test.Run(name=__name__)
爲什麼?因爲...的test_0方法中包含一個隨機選擇..所以每次運行時,它選擇的配置和測試,對這些配置的隨機數。所以我不是多次測試相同的東西..
測試中的隨機性使其不可重現。有一天,你可能會失敗100次,當你再次運行它時,它已經消失了。
使用新型測試工具有一個序列號,參數化測試,然後使用random.seed
有一個隨機但重複性測試用例序列中的每個號碼。
portusato暗示的鼻子,但pytest是一個更現代和流行的工具:
import random, pytest
@pytest.mark.parametrize('i', range(100))
def test_random(i):
orig_state = random.getstate()
try:
random.seed(i)
data = generate_random_data()
assert my_algorithm(data) == works
finally:
random.setstate(orig_state)
pytest.mark.parametrize
「爆炸」的單一test_random
到100個獨立的測試 - test_random[0]
通過test_random[99]
:
$ pytest -q test.py
....................................................................................................
100 passed in 0.14 seconds
每這些測試會爲您的算法生成不同的隨機但可重現的輸入data
。如果test_random[56]
失敗,則每次都會失敗,因此您將能夠對其進行調試。
好問題是爲什麼你想要那個?單元測試框架詞意圖允許測試方法的結果,所以多次運行相同的測試並不合理。如果你想控制執行時間,要使用的模塊是'timeit'。 –
爲什麼?因爲... test_0方法包含一個隨機選項..所以每次運行它時都會根據這些配置選擇隨機數的配置和測試。所以我不會多次測試相同的東西。 – ulta
即使對隨機值運行多個測試也很奇怪。當你想控制進化沒有帶來回歸的時候,測試的目的是再次運行,總是有相同的結果。選擇一些*有趣的*配置並測試它們。如果你想了解參數化測試,你可以看看https://stackoverflow.com/q/32899/3545273 –