0
我目前使用pytest-benchmark對基於非重新平衡二叉搜索樹的AVL樹的實現進行基準測試。到目前爲止,它似乎對我很好,但我遇到了一個問題。爲了整合測試文件,我發現我可以爲parametrize tests和group the output of the benchmark爲可讀性,但我似乎無法同時做到這一點。用pytest對參數化基準進行分組
我當前插入基準:
# always the same for repeatability
random.seed(0x1C2C6D66)
def insertRandomOrder(t, n):
tree = t()
for i in range(0,n):
tree.insert(random.randint(0,0x7FFFFFFF),i)
def insertDescendingOrder(t, n):
tree = t()
for i in range(0,n):
tree.insert(n-i,i)
def insertOutInOrder(t, n):
tree = t()
for i in range(0,n):
idx = (i%2)*n + (1-2*(i%2))*i
tree.insert(idx,i)
def insertAscendingOrder(t, n):
tree = t()
for i in range(0,n):
tree.insert(i,i)
types = [BaseTree, AvlTree]
sizes = [100,300,1000]
cases = [insertAscendingOrder, insertDescendingOrder, insertOutInOrder, insertRandomOrder]
@pytest.mark.parametrize('t', types)
@pytest.mark.parametrize('n', sizes)
@pytest.mark.parametrize('case', cases)
def test_insert_benchmark(benchmark, t, n, case):
benchmark(case, t, n)
這裏是輸出:
有誰知道的一種方式,我可以組輸出但說了,case
從我例?或者更好,通過一個(case,n)
元組?
有在主分支具體PARAM分組的支持。 只需'pip安裝https:// github.com/ionelmc/pytest-benchmark/archive/master.zip',然後使用'--benchmark-group-by = param:case'。 我認爲我們可以支持'case,n'情況... – ionelmc
我看到param選項,但不知道主分支中的':'選項。我在master分支中得到一個無關的錯誤,但是當我嘗試運行基準時。 「File」xxx \ python35 \ lib \ site-packages \ pytest_benchmark \ storage.py第41行if candidate.is_file():'「,」OSError:[WinError 123]文件名,目錄名稱或卷標語法不正確:'[0-9] [0-9] [0-9] [0-9] _ *'「(在Windows 10上運行...工作計算機。當我回到我的首選Linux上時,我會再試一次開發環境) –
僅供參考,我已經解決了Windows問題,現在可以使用'--benchmark-group-by = param:foo,param:bar'(在master分支中) – ionelmc