2016-05-12 73 views
0

我試圖重複運行一個參數化的測試。它在執行測試時似乎不遵循順序。我嘗試使用pytest-repeat和pytest.mark.parametrize,但我仍然沒有得到期望的結果。 代碼是pytest參數重複測試的執行順序似乎是錯誤的

conftest.py

scenarios = [('first', {'attribute': 'value'}), ('second', {'attribute': 'value'})] 
id = [scenario[0] for scenario in scenarios] 
@pytest.fixture(scope="function", params=scenarios, ids=id) 
def **get_scenario**(request): 
    return request.param 

test_param.py

@pytest.mark.parametrize("count",range(3)) 
def test_scenarios(get_scenario,count): 
    assert get_scenario 

當我執行

py.test test_param.py 

結果我得到的是

test_scenarios[first-0] 
test_scenarios[first-1] 
test_scenarios[first-2] 
test_scenarios[second-0] 
test_scenarios[second-1] 
test_scenarios[second-2] 

結果IAM 期待是

test_scenarios[first-0] 
test_scenarios[second-0] 
test_scenarios[first-1] 
test_scenarios[second-1] 
test_scenarios[first-2] 
test_scenarios[second-2] 

有沒有什麼辦法可以使它像工作作爲測試「第一」設置日期和「第二」會取消數據,因此我需要維護訂單,以便我可以運行重複測試。這些測試基本上是用於性能分析的,它測量了通過API設置數據和清除數據的時間。任何幫助非常感謝。在此先感謝

回答

0

最後,我找到了一種方法來做到這一點。而不是方案 conftest我把它移動到一個測試,然後使用pytest.mark.parametrize。 pytest將參數分組,而不是逐個執行列表。反正我實現方式如下:記住計數順序應該是接近的測試方法

test_param.py

scenarios = [('first', {'attribute': 'value'}), ('second', {'attribute': 'value'})] 

@pytest.mark.parametrize("test_id,scenario",scenarios) 
@pytest.mark.parametrize("count",range(3)) #Remember the order , if you move it first then it will not run it the order i desired i-e first,second,first second 
def test_scenarios(test_id,scenario,count): 
    assert scenario["attribute"] == "value" 

輸出將是

test_scenario[0-first-scenario0] 
test_scenario[0-second-scenario1] 
test_scenario[1-first-scenario0] 
test_scenario[1-second-scenario1] 
test_scenario[2-first-scenario0] 
test_scenario[2-second-scenario1] 

希望這會有所幫助