Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 25

Функция setup и pytest

04.07.2021, 12:36. Показов 1788. Ответов 3

Студворк — интернет-сервис помощи студентам
Приветствую!

Собственно ситуация, когда не использую функцию setup() со своим словарем, вложенный кортеж - все работает, тесты срабатывают, как только обьявляю функцию setup() - в терминале пишет что тестов в обще нет "no tests run"
возможно проблема в отступах

Код скрипта с setup():

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import requests
import pytest
from lib.base_case import BaseCase
 
 
class TestUserAgent(BaseCase):
 
    def setup(self):
        data = [
            (
                {
                    "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",
                    "expected_platform": "Mobile",
                    "expected_browser": "No",
                    "expected_device": "Android"
                }
            ),
            (
                {
                    "user_agent": "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",
                    "expected_platform": "Mobile",
                    "expected_browser": "Chrome",
                    "expected_device": "iOS"
                }
            ),
            (
                {
                    "user_agent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
                    "expected_platform": "Googlebot",
                    "expected_browser": "Unknown",
                    "expected_device": "Unknown"
                }
            ),
            (
                {
                    "user_agent": "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",
                    "expected_platform": "Web",
                    "expected_browser": "Chrome",
                    "expected_device": "No"
                }
            ),
            (
                {
                    "user_agent": "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_platform": "Mobile",
                    "expected_browser": "No",
                    "expected_device": "Iphone"
                }
            ),
        ]
 
        @pytest.mark.parametrize('data', data)
        def test_user_agent_one(self, data):
            self.user_agent = data['user_agent']
            self.expected_platform = data['expected_platform']
            self.expected_browser = data['expected_browser']
            self.expected_device = data['expected_device']
 
            response = requests.get(
                "https://host.ru/ajax/api/user_agent_check",
                headers={"User-Agent": self.user_agent}
            )
 
            answer = response.json()
            #actual_platform = answer["platform"]
            #actual_browser = answer["browser"]
            #actual_device = answer["device"]
            actual_platform = self.get_answer(response, "platform")
            actual_browser = self.get_answer(response, "browser")
            actual_device = self.get_answer(response, "device")
            #assert expected_platform == actual_platform, f"Platform is not correct. Expected: {expected_platform}. Actual: {actual_platform}.  UserAgent: {user_agent}"
            #assert expected_browser == actual_browser, f"Browser is not correct. Expected: {expected_browser}. Actual: {actual_browser}. UserAgent: {user_agent}"
            #assert expected_device == actual_device, f"Device is not correct. Expected: {expected_device}. Actual: {actual_device}.  UserAgent: {user_agent}"
рабочий код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import requests
import pytest
from lib.base_case import BaseCase
 
 
class TestUserAgent(BaseCase):
 
    data = [
        (
            {
                "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",
                "expected_platform": "Mobile",
                "expected_browser": "No",
                "expected_device": "Android"
            }
        ),
        (
            {
                "user_agent": "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",
                "expected_platform": "Mobile",
                "expected_browser": "Chrome",
                "expected_device": "iOS"
            }
        ),
        (
            {
                "user_agent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
                "expected_platform": "Googlebot",
                "expected_browser": "Unknown",
                "expected_device": "Unknown"
            }
        ),
        (
            {
                "user_agent": "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",
                "expected_platform": "Web",
                "expected_browser": "Chrome",
                "expected_device": "No"
            }
        ),
        (
            {
                "user_agent": "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_platform": "Mobile",
                "expected_browser": "No",
                "expected_device": "Iphone"
            }
        ),
    ]
 
    @pytest.mark.parametrize('data', data)
    def test_user_agent_one(self, data):
        self.user_agent = data['user_agent']
        self.expected_platform = data['expected_platform']
        self.expected_browser = data['expected_browser']
        self.expected_device = data['expected_device']
 
        response = requests.get(
            "https://host.ru/ajax/api/user_agent_check",
            headers={"User-Agent": self.user_agent}
        )
 
        answer = response.json()
        #actual_platform = answer["platform"]
        #actual_browser = answer["browser"]
        #actual_device = answer["device"]
        actual_platform = self.get_answer(response, "platform")
        actual_browser = self.get_answer(response, "browser")
        actual_device = self.get_answer(response, "device")
        #assert expected_platform == actual_platform, f"Platform is not correct. Expected: {expected_platform}. Actual: {actual_platform}.  UserAgent: {user_agent}"
        #assert expected_browser == actual_browser, f"Browser is not correct. Expected: {expected_browser}. Actual: {actual_browser}. UserAgent: {user_agent}"
        #assert expected_device == actual_device, f"Device is not correct. Expected: {expected_device}. Actual: {actual_device}.  UserAgent: {user_agent}"

base_case.py:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import json.decoder
 
from requests import Response
 
class BaseCase:
    def get_answer(self, response: Response, name):
        try:
            response_as_dict = response.json()
        except json.decoder.JSONDecodeError:
            assert False, f"response is not JSON format. Response text is '{response.text}'"
 
        assert name in response_as_dict, f"Response not have '{name}'"
 
        return response_as_dict[name]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2021, 12:36
Ответы с готовыми решениями:

Сборка пакетов python setup.py sdist нет такого файла setup.py
опять windows виновата? Сколько изучаю, вообще ни разу не встречал этот файл в нём. Даже в самой директории с установкой языка python не...

Inno Setup - вскрыть уже скомпилированный ранее setup.exe
Можно ли этой программкой вскрыть уже скомпилированный ранее setup.exe и посмотреть, какие там скрипты под конец распаковки идут? Дело в...

Не инсталится! .NET Framework Setup cannot write to the setup log.
Не инсталируется .NET Framework 1.1 - вылетает ошибка .NET Framework Setup cannot write to the setup log. Как поправить без...

3
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.07.2021, 15:42
Да, проблема в отступах

Добавлено через 11 минут
Не знаю, что вы хотите протестировать, но я бы написал так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def _get_response(user_agent):
    return requests.get("https://host.ru/ajax/api/user_agent_check", headers={"User-Agent": user_agent})
 
def test_user_agent1():
    o = BaseCase()
    response = _get_response("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")
    assert o.get_answer(response, "platform") == "Mobile"
    assert o.get_answer(response, "browser") == "No"
    assert o.get_answer(response, "device") == "Android"
 
def test_user_agent2():
    o = BaseCase()
    response = _get_response("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")
    assert o.get_answer(response, "platform") == "Mobile"
    assert o.get_answer(response, "browser") == "No"
    assert o.get_answer(response, "device") == "Android"
Добавлено через 59 секунд
При желании добавить ещё один тест просто копипастится функция.
0
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 25
04.07.2021, 19:41  [ТС]
Как например в этом коде правильно "наследовать"\ сделать доступным словарь с кортежом data, чтобы он был виден
на 52 строке?слово data подсвечивается как не определенное имя

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import requests
import pytest
from lib.base_case import BaseCase
from lib.assertions import Assertions
 
 
class TestUserAgent(BaseCase):
    def setup(self):
        data = [
            (
                {
                    "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",
                    "expected_platform": "Mobile",
                    "expected_browser": "No",
                    "expected_device": "Android"
                }
            ),
            (
                {
                    "user_agent": "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",
                    "expected_platform": "Mobile",
                    "expected_browser": "Chrome",
                    "expected_device": "iOS"
                }
            ),
            (
                {
                    "user_agent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
                    "expected_platform": "Googlebot",
                    "expected_browser": "Unknown",
                    "expected_device": "Unknown"
                }
            ),
            (
                {
                    "user_agent": "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",
                    "expected_platform": "Web",
                    "expected_browser": "Chrome",
                    "expected_device": "No"
                }
            ),
            (
                {
                    "user_agent": "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_platform": "Mobile",
                    "expected_browser": "No",
                    "expected_device": "Iphone"
                }
            ),
        ]
 
    @pytest.mark.parametrize('data', data)
    def test_user_agent_one(self, data):
        self.user_agent = data['user_agent']
        self.expected_platform = data['expected_platform']
        self.expected_browser = data['expected_browser']
        self.expected_device = data['expected_device']
 
        response = requests.get(
            "https://host.ru/ajax/api/user_agent_check",
            headers={"User-Agent": self.user_agent}
        )
 
 
        Assertions.assert_json_value_by_name(response, "platform", data["expected_platform"], "ERROR assert")
        Assertions.assert_json_value_by_name(response, "browser", data["expected_browser"], "ERROR assert")
        Assertions.assert_json_value_by_name(response, "device", data["expected_device"], "ERROR assert")
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
04.07.2021, 20:21
Добавлено через 1 минуту
ну создай дату до класса или в классе, но не методе сетап, а на уровне класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2021, 20:21
Помогаю со студенческими работами здесь

AMD AutoDetect "Setup has detected an incomplete build. Setup will now exit"
Переустановил windows 8.1 на windows 7. Скачал программу "AMD AutoDetect" с официального сайта. Когда сама прога скачалась, стал...

pytest FileNotFoundError
file_workers/py def read_from_file(filepath): with open(filepath, 'r') as f_o: return f_o.readlines() ...

FastAPI и pytest
Использовал инструкцию https://www.fastapitutorial.com/blog/unit-testing-in-fastapi/ но что-то не взлетело conftest.py: import...

Pytest в Pycharm
Помогите разобраться: Нужно написать тест на Pytest в Pysharm, но он выдает ошибку. Вроде догадываюсь что дело в input(), но как нужно...

Django PyTest
Относительно недавно начал изучать Django, вчера добрался до pytest. Однако столкнулся с непредвиденной ошибкой, в интернете решения тоже,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru