Как тест, вызываемый Robot Framework, возвращает информацию в консоль
у меня есть набор тестов Robot framework, который вызывает метод python. Я хотел бы, чтобы этот метод python вернул сообщение на консоль без сбоя теста. В частности, я пытаюсь определить время процесса.
Я могу использовать "raise" для возврата сообщения на консоль, но это одновременно не проходит тест.
def doSomething(self, testCFG={}):
'''
Do a process and time it.
'''
testCFG['operation'] = 'doSomething'
startTime = time.time()
response=self.Engine(testCFG)
endTime = time.time()
duration = int(round(endTime-startTime))
raise "doSomething took", duration//60 , "minutes and", duration%60, "seconds."
errmsg = 'doSomething failed'
if testCFG['code']: raise Exception(errmsg)
или я могу использовать "печать" для возврата сообщения в файл журнала и отчета без сбоев теста, но эта информация доступна только в докладывайте, а не консоль.
def doSomething(self, testCFG={}):
'''
Do a process and time it.
'''
testCFG['operation'] = 'doSomething'
startTime = time.time()
response=self.Engine(testCFG)
endTime = time.time()
duration = int(round(endTime-startTime))
print "doSomething took", duration//60 , "minutes and", duration%60, "seconds."
errmsg = 'doSomething failed'
if testCFG['code']: raise Exception(errmsg)
если я использую опцию "печать", я получаю это:
==============================================================================
Do Something :: Do a process to a thing(Slow Process). | PASS |
------------------------------------------------------------------------------
doSomething :: Overall Results | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
чего я хочу, так это:
==============================================================================
Do Something :: Do a process to a thing(Slow Process). | PASS |
doSomething took 3 minutes and 14 seconds.
------------------------------------------------------------------------------
doSomething :: Overall Results | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
3 ответов
поскольку вы используете Python, у вас есть две простые возможности:
напишите свои сообщения в
stderr
. Эти сообщения записываются как в лог-файл робота, так и в консоль. Ограничение заключается в том, что сообщения попадают в консоль только после завершения выполнения ключевого слова. Бонус заключается в том, что этот подход работает также с Java-библиотек на основе.напишите свои сообщения в
sys.__stdout__
в Python. Робот только перехватываетsys.stdout
иsys.stderr
и листьяsys.__stdout__
(иsys.__stderr__
) в одиночку (как и все хорошо себя ведущие программы Python). Эти сообщения заканчиваются только на консоли, но вы также можете написать их вsys.stdout
чтобы получить их также в лог-файл.
вы можете использовать робота.библиотека API. Это документ для библиотеки
https://robot-framework.readthedocs.org/en/latest/_modules/robot/api/logger.html
пусть ваш lib вернет строку, затем используйте Set Test Message
, чтобы отобразить его.
My Test Case [Documentation] display data returned from lib call
${r} = mylib.libfunc arg=param
Set Test Message libfunc returned ${r}
ref: http://robotframework.googlecode.com/hg/doc/libraries/BuiltIn.html#Set%20Test%20Message
обновления:
- новая ссылка: http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Set%20Test%20Message
- новая выводит на консоль в режиме реального времени (т. е. во время выполнения теста, в отличие от
Set Test Message
который выводится только в конце тестового набора.)