2017-08-08 1 views
2

Je tente de tester une API Web. Disons qu'un point final accepte plusieurs paramètres:Utilisez pytest pour tester plusieurs options

    Type
  • : avec des valeurs possibles de « grand », « petit », « moyen »
  • couleur: avec des valeurs possibles de « noir », « blanc », " rouge »
  • expédition: avec des valeurs possibles de « 1 », « 2 », « 7 »

Je veux tester toutes les combinaisons de ceux-ci pour assurer l'API retourne des résultats corrects. Au début, je pensais que je pouvais construire 3 appareils:

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 

Mais, je ne sais pas comment je peux créer les permutations pour tout cela. Mon test devrait fonctionner comme ceci:

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) 

Le test doit être exécuté pour chaque permutation et générer une nouvelle URL avec les options disponibles pour chacun. Comment puis-je faire cela avec pytest?

Répondre

3

C'est ce que parametrization est pour:

@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

Votre approche fonctionne comme prévu. Si vous exécutez py.test, vous verrez qu'il est appelé avec toutes les valeurs possibles:

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