2017-08-08 47 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