Форум сайта python.su
Добрый день!
Прошу помочь разобраться…
Сделал код с обработкой исключения для статуса выполнения теста.
Всё работает верно - как при прохождении теста, так и падении…
Так как тестов много, хотел вынести код с исключением в фикстуру…
Но в результате, при любом варианте исполнения теста (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/'
@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")
Офлайн
Это потому что у вас тут бред
result_status = "" try: yield result_status = "PASSED" except Exception: result_status = "FAILED" raise
Офлайн
Но, вот так всё работает… Может конечно не оптимально сделано для 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")
Офлайн
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 # вот это и есть тест
Офлайн