Я хотел бы настроить хороший способ захвата снимков экрана, когда некоторые из наших пробных тестов Robot Framework не пройдут. Конечно, я могу добавить:Захват скриншота при сбое теста в сложном тестовом комплекте
Run Keyword If Test Failed Capture Page Screenshot
Чтобы проверить Teardown
, но учитывая, что я есть огромные и сложные наборы тестов с сотнями тестов и вложенной структуры - мне нужно, чтобы добавить это так много разборок, что кажется некрасиво меня.
Я немного экспериментировал. Я думал, что путь вперед должен был использовать listener
. Поэтому я пробовал это:
class ExtendedSelenium(Selenium2Library):
ROBOT_LISTENER_API_VERSION = 3
def __init__(self, timeout=5.0, implicit_wait=0.0, run_on_failure='Capture Page Screenshot', screenshot_root_directory=None):
super(ExtendedSelenium, self).__init__(timeout, implicit_wait, run_on_failure, screenshot_root_directory)
self.ROBOT_LIBRARY_LISTENER = self
def _end_test(self, data, result):
if not result.passed:
screenshot_name = data.id + data.name.replace(" ", "_") + ".png"
try:
self.capture_page_screenshot(screenshot_name)
except:
pass
Он фиксирует скриншот, но изображение не отображается в журнале. Я в состоянии отобразить его в тестовом сообщении, добавив этот шаг после захвата:
BuiltIn().set_test_message("*HTML* {} <br/> <img src={}>".format(result.message, screenshot_name))
Но все-таки, это не самое лучшее.
Тогда я попробовал другой подход с интерфейсом Visitor
(используется с --prerunmodifier):
from robot.api import SuiteVisitor
class CaptureScreenshot(SuiteVisitor):
def end_test(self, test):
if test.status == 'FAIL':
test.keywords.create('Capture Page Screenshot', type='teardown')
Но он заменяет любой существующий тест Teardown
на новую (только одно ключевое слово «Capture страницу Снимок экрана»). Я думал, что смогу изменить существующий Teardowns
, добавив ключевое слово Capture
, но я не был.
Есть ли какой-нибудь хороший, чистый, питонический способ сделать это? Я что-то пропустил?
Я думаю, что путинский способ заключается в том, чтобы добавить надлежащее тестовое отключение к каждому тесту. Похоже, вы не ищете питоновское решение, а скорее обходное решение. Знаете ли вы, что вы можете определить тестовое разрывы на уровне набора, так что вам нужно добавить его только один раз в файл? –
Несомненно, я могу определить тестовый разрыв на уровне набора. Но, как я уже упоминал, структура целого набора довольно сложна со множеством вложенных подсетей. Таким образом, любое внутреннее тестовое отключение переопределяет одно из родительского пакета. Для меня немного неудобно добавить ключевое слово захвата в более чем 20 мест и не забывайте в будущем, поэтому я искал способ, как это сделать в одном месте. Да, возможно, это более обходное решение. –