Как тест, вызываемый 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, у вас есть две простые возможности:

  1. напишите свои сообщения в stderr. Эти сообщения записываются как в лог-файл робота, так и в консоль. Ограничение заключается в том, что сообщения попадают в консоль только после завершения выполнения ключевого слова. Бонус заключается в том, что этот подход работает также с Java-библиотек на основе.

  2. напишите свои сообщения в 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

обновления:

  1. новая ссылка: http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Set%20Test%20Message
  2. новая выводит на консоль в режиме реального времени (т. е. во время выполнения теста, в отличие от Set Test Message который выводится только в конце тестового набора.)