9

我有一个调用 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
==============================================================================
4

3 回答 3

13

由于您使用的是 Python,因此您有两种简单的可能性:

  1. 将您的消息写入stderr. 这些消息同时写入机器人的日志文件和控制台。一个限制是消息仅在您正在执行的关键字完成后才会到达控制台。一个好处是这种方法也适用于基于 Java 的库。

  2. 用 Python写你的消息sys.__stdout__。机器人只拦截sys.stdout并单独sys.stderr留下sys.__stdout__(and sys.__stderr__)(所有表现良好的 Python 程序都应该这样做)。这些消息只会到达控制台,但您也可以将它们写入以sys.stdout将它们也写入日志文件。

于 2011-04-04T21:34:52.290 回答
2

您可以使用robot.api 库。这是图书馆的文件

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

于 2014-01-16T17:16:49.517 回答
0

让你的库返回一个字符串,然后Set Test Message用来显示它。

My Test Case  [Documentation]  display data returned from lib call
  ${r} =  mylib.libfunc  arg=param
  Set Test Message  libfunc returned ${r}

参考: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仅在测试用例结束时输出。)
于 2013-10-15T23:56:02.053 回答