Пишу тесты на Python. Необходимо сделать скриншот в момент падения теста. Но я не хочу это делать через try except , т.к. хочется видеть на каком assert’е завалился тест. Подозреваю, что делать скриншот надо в tearDown перед закрытием браузера. Если кто-то знает, как это сделать правильно, то я был бы рад получить совет.
Это все пихается в conftest.py, потом нужный тест маркируется на использование фикстуры screenshot_on_failure. Дальше можете развить эту идею чтобы не пришлось помечать отдельные тесты
Всё правильно. Скриншот надо делать а TearDown методе. Но браузер Вы скорее закрываете в TearDown сьюта, а скриншот можно делать в TearDown теста.
В тестовом фреймворке, который Вы используете (какой именно я не увидел) скорее всего есть несколько видов TearDown: для сьюта - запускается в конце всех тестов, для класса - запускается после всех тестовых методов класса, для теста - запускается поле каждого теста. Последний как раз нужное место.
Плюс скорее всего TearDown во фреймворке поддерживает наследование. Таким образом вырисовывается структура, что все тесты наследуются от базового тест класса, в котором объявлен TearDown с деланием скриншота. При такой структуре скриншот будет делаться в конце каждого теста.
Тестовый фреймворк также скорее всего позволяет проверить в TearDown успешность теста и сделать скриншот только для неуспешных.
Я пользуюсь подобной структурой уже долгое время, если нужны детали или схема классов, спрашивайте
Тут не все так просто. Если тест будет не юай то смысл там что то скринить? (Иногда необходимо после какой то проверки на юай ещё и в бд например что то глянуть в одном тесте)
Перейдите на py.test. unittest - это моветон и не комильфо А если серьезно, то py.test легко схавает ваши тесты без переделки т.к. есть совместимость, но в py.test вы получите куда больше возможностей. К тому же есть такая “няшка” как allure для py.test
Это не решение, это дабл-пенетрейшн костыль.
Скринить надо на ассерте или при экзепшене самого драйвера?
Если второе - то надо смотреть в сторону AbstractEventListener и его метода on_exception.
Для первого варианта - прям сходу не скажу, но я уверен, что оно куда проще.
Что касается аллюр-репортов: при падении теста тот же дженкинс шлет на мыло такую простыню с трейсбеком, что меня начинает тошнить. Гораздо проще перейти по линку и посмотреть откуда растут ноги, с понятным коротким трейсом (без всей иерархии), или увидеть конкретный ассерт, который все завалил.
Абезяне-тестировщику - репорт может ничего и не скажет. А вот автору тестов - аж бегом.