【问题标题】:How can a test called by Robot Framework return information to the consoleRobot Framework 调用的测试如何将信息返回到控制台
【发布时间】:2011-07-29 06:53:26
【问题描述】:

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

【问题讨论】:

    标签: python frameworks automated-tests robotframework


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢 Pekka,如果我知道你也在这里,我就不会在两个地方问同样的问题了。
    • 很高兴我能帮上忙。我几乎是偶然注意到了这个问题,并且可以轻松地将我发送给机器人框架用户的相同答案粘贴到上面。将来我可能会开始更密切地关注 SO。在我们获得单独的机器人框架标签(不确定创建一个标签需要什么)之前,您可能希望将自动化测试标签与机器人相关的问题一起使用。
    • 要创建标签,您需要 1500 的声誉。我们都没有。
    • 我们可以请有足够声誉的人来创建这样的标签。除非这里有更多与机器人相关的问题,否则可能不值得。
    • 看起来有人创建了我们的机器人框架标签。谢谢,布莱恩!
    【解决方案2】:

    让你的库返回一个字符串,然后使用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 仅在测试用例结束时输出。)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多