2017-08-08 106 views
2

我正在嘗試測試一個web API。比方說,一個端點接受多個參數:使用pytest測試多個選項

  • 類型:有「大」,「小」,「中」
  • 顏色的可能值:有可能值「黑」,「白」,「紅色的」
  • 航運:有可能的值‘1’,‘2’,‘7’

我想測試所有這些組合,以確保該API返回正確的結果。起初我以爲我可以建立3個裝置:

valid_types = ["big", "small", "medium"] 
valid_colors = ['black', 'white', 'red'] 
valid_shipping = ['1', '2', '7'] 

@pytest.fixture(params=valid_types) 
def valid_type(request): 
    return request.param 


@pytest.fixture(params=valid_colors) 
def valid_color(request): 
    return request.param 


@pytest.fixture(params=valid_shipping) 
def valid_ship(request): 
    return request.param 

但是,我不知道如何創建所有這些排列。我的測試應該這樣操作:

def test_api_options(valid_type, valid_color, valid_ship): 
    url_query = "?type={}&color={}&ship={}".format(valid_type, valid_color, valid_ship) 
    r = requests.get("{}{}".format(base_url, url_query) 

測試應該運行的每個排列併產生了每個可用選項的新網址。我如何用pytest來做到這一點?

回答

3

這是parametrization是:

@pytest.mark.parametrize('valid_type', valid_types) 
@pytest.mark.parametrize('valid_color', valid_colors) 
@pytest.mark.parametrize('valid_ship', valid_shipping) 
def test_api_options(valid_type, valid_color, valid_ship): 
1

你的方法按預期工作。如果您運行py.test,您會看到它被稱爲所有可能的值:

test_api_options[big-black-1] PASSED 
test_api_options[big-black-2] PASSED 
test_api_options[big-black-7] PASSED 
test_api_options[big-white-1] PASSED 
test_api_options[big-white-2] PASSED 
test_api_options[big-white-7] PASSED 
test_api_options[big-red-1] PASSED 
test_api_options[big-red-2] PASSED 
test_api_options[big-red-7] PASSED 
test_api_options[small-black-1] PASSED 
test_api_options[small-black-2] PASSED 
test_api_options[small-black-7] PASSED 
test_api_options[small-white-1] PASSED 
test_api_options[small-white-2] PASSED 
test_api_options[small-white-7] PASSED 
test_api_options[small-red-1] PASSED 
test_api_options[small-red-2] PASSED 
test_api_options[small-red-7] PASSED 
test_api_options[medium-black-1] PASSED 
test_api_options[medium-black-2] PASSED 
test_api_options[medium-black-7] PASSED 
test_api_options[medium-white-1] PASSED 
test_api_options[medium-white-2] PASSED 
test_api_options[medium-white-7] PASSED 
test_api_options[medium-red-1] PASSED 
test_api_options[medium-red-2] PASSED 
test_api_options[medium-red-7] PASSED