Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 5, 2022 11:16:09

VladimirAnt
Зарегистрирован: 2022-09-05
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Фикстура для получения статуса выполнения теста

Добрый день!
Прошу помочь разобраться…
Сделал код с обработкой исключения для статуса выполнения теста.
Всё работает верно - как при прохождении теста, так и падении…
Так как тестов много, хотел вынести код с исключением в фикстуру…
Но в результате, при любом варианте исполнения теста (PASSED / FAILED) на печать выводится только PASSED. Т.е. когда тест падает, FAILED не подтягивается…
Можете подсказать почему и можно ли это реализовать через фикстуру?
Пример тест-функции:

 from selenium import webdriver
from urllib.parse import urlparse
 
def test_status():
    """Тестируем открытие сайта..."""
    with webdriver.Chrome() as driver:
        driver.maximize_window()
        driver.get("https://www.gismeteo.ru/weather-moscow-4368/")
        url_path = urlparse(driver.current_url)
        assert url_path.path == '/weather-moscow-4368/'

Пример фикстуры в файле conftest.py:
 @pytest.fixture(autouse=True)
# Получение статуса теста
def get_status_test():
    result_status = ""
    try:
 
        yield
 
        result_status = "PASSED"
    except Exception:
        result_status = "FAILED"
        raise
 
    finally:
        if result_status == "PASSED":
            symbol = u'\u2605'
        else:
            symbol = u'\u2716'
        with open(r"../tests/Notebook.json", 'a', encoding='utf8') as file:
            file.write(f">> Результат теста: {result_status} {symbol}\n")
Благодарю!

Офлайн

#2 Сен. 5, 2022 15:16:42

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Фикстура для получения статуса выполнения теста

Это потому что у вас тут бред

 result_status = ""
    try:
 
        yield
 
        result_status = "PASSED"
    except Exception:
        result_status = "FAILED"
        raise
И срабатывает все время
finally



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Сен. 5, 2022 18:10:19

VladimirAnt
Зарегистрирован: 2022-09-05
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Фикстура для получения статуса выполнения теста

Но, вот так всё работает… Может конечно не оптимально сделано для Python, но готов поучиться ))

 def test_status():
    """Тестируем открытие сайта..."""
    with webdriver.Chrome() as driver:
        driver.maximize_window()
        driver.get("https://www.gismeteo.ru/weather-moscow-4368/")
        result_status = ""
        try:
            url_path = urlparse(driver.current_url)
            assert url_path.path == '/weather-moscow-4368/'
            result_status = "PASSED"
        except Exception:
            result_status = "FAILED"
            raise
        finally:
            if result_status == "PASSED":
                symbol = u'\u2605'
            else:
                symbol = u'\u2716'
            with open(r"../tests/Notebook.json", 'a', encoding='utf8') as file:
                file.write(f">> Результат теста: {result_status} {symbol}\n")

Если адрес = /weather-moscow-4368/
Результат:
>>><>test_status
>> Результат теста: PASSED ★
>> Время выполнения теста: 4.264 сек

Если адрес = weather-moscow-4368/ (без слеша вначале)
Результат:
>>><>test_status
>> Результат теста: FAILED ✖
>> Время выполнения теста: 4.301 сек

А как реализовать через фикстуру, не соображу ))

Офлайн

#4 Сен. 6, 2022 10:13:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Фикстура для получения статуса выполнения теста

VladimirAnt
Мысль то ваша насчет фикстуры понятна в целом, но вот к самому тесту вопросы экзистенциальные. Вы, собственно, чего тестируете то? Вот здесь у вас что является юнитом, который вы тестируете?

 def test_status():
    """Тестируем открытие сайта..."""
    with webdriver.Chrome() as driver:
        driver.maximize_window()
        driver.get("https://www.gismeteo.ru/weather-moscow-4368/")
        url_path = urlparse(driver.current_url)
        assert url_path.path == '/weather-moscow-4368/'

Тестируем открытие сайта…
Чего??? А зачем вы это тестируете? Не надо тестировать webdriver, его уже протестировали его создатели. Тестируйте свой код. Напишите функцию, которая что-то делает. Это действие будет выражаться либо в расчете возвращаемого значения либо в накладываемом побочном эффекте. Вот это действие вы и должны протестировать.

Пример
   
def calculate_square(val: int):
    return val * val
   
@pytest.mark.parametrize("val,result", [(0, 0), (1, 1), (5, 25), (-5, 25)])
def test_calculate_square(val, result):
     assert calculate_square(val) == result  # вот это и есть тест
  

вы извините, но вы какую-то настолько непонятную ерунду делаете, что кажется сами не понимаете что делаете и зачем. Покажите тестируемую функцию, без этого тест не имеет смысла



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version