@kisazavr

Как в Pytest создать паратремизованный тест с использованием разных параметров?

Пытаюсь написать параметризированный тест, где отправляется 5 запросов и для каждого запроса должна проходить проверка на соответствие ожидаемым параметрам (ожидаемые параметры разные для каждого запроса
НАписала код, но если в переменную expected_response_text указать значение UA, не работает. проверки не падают, только если прописать вручную ор. В общем,ай нид хелп :(

import pytest
import requests

class TestTask3:
    UA = [
        (
            "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",
            "Mobile",
            "No",
            "Android"
        ),
        (
            "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",
            "Mobile",
            "Chrome",
            "iOS"
        ),
        (
            "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
            "Googlebot",
            "Unknown",
            "Unknown"
        ),
        (
            "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",
            "Web",
            "Chrome",
            "No"
        ),
        (
            "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",
            "Mobile",
            "No",
            "iPhone"
        )
    ]
    answer = [{'platform':'Mobile', 'browser':'No', 'device':'Android'}]
    bad_value = "Unknown"

    @pytest.mark.parametrize('agent, platform, browser, device', UA)
    def test_get_user_agent(self, agent, platform, browser, device):
        url = "https://playground.learnqa.ru/ajax/api/user_agent_check"
        UA = {"user-agent": agent}

        response = requests.get(url, headers=UA)
        parsed_response = response.json()
        expected_response_text=[]


        for i in UA:

            expected_response_text.append(i)

            expected_response_text = {'user_agent': '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','platform': 'Mobile', 'browser': 'No', 'device': 'Android'}
        actual_response_text = parsed_response
        assert actual_response_text == expected_response_text, "{agent} contains {answer} parameter with {bad_value} value"
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
у вас какая-то каша в коде:

expected_response_text=[]
for i in UA:
expected_response_text.append(i)
expected_response_text = {'user_agent': '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','platform': 'Mobile', 'browser': 'No', 'device': 'Android'}
- вот тут вы идете по словарю, добавляете ключ в лист expected_response_text, потом в него же переприсваете словарь харкодный - что тут по вашему должно произойти?

Ну и словари на прямую сравнивать бессмыслено надо всегда искать diff

@pytest.mark.parametrize('agent, platform, browser, device', UA)
    def test_get_user_agent(self, agent, platform, browser, device):
        url = "https://playground.learnqa.ru/ajax/api/user_agent_check"
        UA = {"user-agent": agent}

        response = requests.get(url, headers=UA)
        parsed_response = response.json()
        expected_response_text = {
            'user_agent': agent,
            'platform': platform,
            'browser': browser,
            'device': device
        }
        print(expected_response_text)
        actual_response_text = parsed_response
        print(actual_response_text)
        assert not (result := compare(expected_response_text, actual_response_text)), result
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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