Как тест, вызванный Robot Framework, может вернуть информацию на консоль - PullRequest
9 голосов
/ 04 апреля 2011

У меня есть набор тестов для фреймворка робота, который вызывает метод python. Я хотел бы, чтобы этот метод Python возвращал сообщение на консоль, не провалив тест. В частности, я пытаюсь рассчитать время процесса.

Я могу использовать «поднимать», чтобы вернуть сообщение на консоль, но это одновременно не проходит тест.

 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 ]

13 голосов
/ 05 апреля 2011

Поскольку вы используете Python, у вас есть две простые возможности:

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

  2. Пишите свои сообщения на sys.__stdout__ в Python.Робот только перехватывает sys.stdout и sys.stderr и оставляет sys.__stdout__sys.__stderr__) в одиночестве (как должны делать все хорошо работающие программы Python).Эти сообщения попадают только в консоль, но вы также можете записать их в sys.stdout, чтобы получить их также в файл журнала.

2 голосов
/ 16 января 2014

Вы можете использовать библиотеку robot.api.Это документ для библиотеки

https://robot -framework.readthedocs.org / en / latest / _modules / robot / api / logger.html

0 голосов
/ 16 октября 2013

Пусть ваша библиотека вернет строку, затем используйте 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. новая команда Log To Console выводит на консоль в режиме реального времени (т. е. во время выполнения теста, в отличие от Set Test Message, который выводит только в конце тестового примера.)
...