@german_mel

Как правильно указать 2 параметра в фикстуре pytest.mark.parametrize?

Добрый день! Мне необходимо запустить параметризованный тест, который будет принимать 2 значения из списков т.е. будет брать для первого теста list1[0] и list2[0], для второго list1[1] и list2[1] и т.д. Но не получается правильно указать параметры в фикстуре.

Если я указываю @pytest.mark.parametrize('agent_value, expected_value', (user_agents, expected_values)) передаётся весь список целиком и я получаю ошибку ['agent_value', 'expected_value'] must be equal to the number of values (5): "вывод всего списка".
Если указать один параметр @pytest.mark.parametrize('agent_value', user_agents) то значения списка передаются по одному и тесты проходят, но мне нужны оба значения, чтобы потом сравнивать ввод с выводом.

Подскажите пожалуйста как корректно указать параметры в фикстуре. Прикладываю код.

import requests
import pytest

user_agents = [
    'Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
    'Mozilla/5.0 (iPad; CPU OS 13_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/91.0.4472.77 Mobile/15E148 Safari/604.1',
    'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.100.0',
    'Mozilla/5.0 (iPad; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
]

expected_values = [
    {'platform': 'Mobile', 'browser': 'No', 'device': 'Android'},
    {'platform': 'Mobile', 'browser': 'Chrome', 'device': 'iOS'},
    {'platform': 'Googlebot', 'browser': 'Unknown', 'device': 'Unknown'},
    {'platform': 'Web', 'browser': 'Chrome', 'device': 'No'},
    {'platform': 'Mobile', 'browser': 'No', 'device': 'iPhone'}
]

@pytest.mark.parametrize('agent_value, expected_value', (user_agents, expected_values))
def test_user_agent(agent_value, expected_value):
    print(agent_value)

    response = requests.get("https://playground.learnqa.ru/ajax/api/user_agent_check", headers={"User-Agent": agent_value})

    print(response.text)
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
@twistfire92
Python backend developer
Что если так?

@pytest.mark.parametrize('values', zip(user_agents, expected_values))
def test_user_agent(values):
    agent_value, expected_value = values
    response = requests.get("https://playground.learnqa.ru/ajax/api/user_agent_check", headers={"User-Agent": agent_value})
    print(response.text)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы