将终端命令错误输入Robot Framework报告

时间:2017-06-09 00:34:37

标签: robotframework

Robot Framework的新手 - 快速提问: 通过Robot Framework执行的命令会在终端上生成错误转储。我想拿起错误并将其填入机器人框架报告中的log.html#s1-t1。

这是我的Python代码:

from test.testing import testcase
from testers import *

def run_testcase():
        main(module=testcase, action='simulate')

这是我的机器人框架代码:

*** Settings ***
Library                testing_testcase.py


*** Test Cases ***
Testing the testcase - (TC462)
  Run testcase

我想要的是如何捕获终端中命令生成的错误并将其填入Robot Framework报告中。

这些是转储,我想在报告中捕获。此命令是手动运行的:

Johns-MacBook-Pro:~ john.doe$ ~/models/.venv/bin/python /Users/john.doe/models/cores/mumimo/pycores/mumimo/testing_testcase.py simulate
Traceback (most recent call last):
  File "/Users/john.doe/models/cores/mumimo/pycores/mumimo/testing_testcase.py", line 138, in <module>
    main3()
  File "/Users/john.doe/models/src/mymytask/mymytask.py", line 529, in main3
    env = environment()
  File "/Users/john.doe/models/.venv/src/mytask/mytask/_block.py", line 125, in __call__
    self.srcline, *args, **kwargs)
  File "/Users/john.doe/models/.venv/src/mytask/mytask/_block.py", line 158, in __init__
    self.subs = _flatten(func(*args, **kwargs))
  File "/Users/john.doe/models/src/mymytask/mymytask.py", line 527, in environment
    tb = args.testbench(ports, params)
  File "/Users/john.doe/models/.venv/src/mytask/mytask/_block.py", line 125, in __call__
    self.srcline, *args, **kwargs)
  File "/Users/john.doe/models/.venv/src/mytask/mytask/_block.py", line 158, in __init__
    self.subs = _flatten(func(*args, **kwargs))

1 个答案:

答案 0 :(得分:1)

如果终端上生成的错误表示关键字失败,并且您在运行期间在conosle中看到它,则使用关键字Run Keyword And Ignore Error - 它返回2个变量,嵌入关键字的状态,以及成功时的输出,或失败时的错误/异常(您想要的情况)。

所以测试用例的主体是:

Testing the testcase - (TC462)
    ${rc}  ${msg}    Run Keyword And Ignore Error    Run testcase
    Run Keyword If    '${rc}' == 'FAIL'    Log    The error is: ${msg}
               ...    ELSE    Log the keyword did not fail, its output is: ${msg}

    Run Keyword If    '${rc}' == 'FAIL'    Fail    Failing the case, the keyword failed

查看更新后的问题,似乎对我来说,您不仅要记录特定的异常 - 这将在上面的代码中发生,而且还要记录完整的堆栈跟踪。

如果是这样,那么python代码应该发生变化 - 你必须得到并将其作为函数的一部分返回。

只有一个python模块 - traceback,更具体地说是format_exec。以下是一个如何完成的示例,根据您的需要对其进行一些调整:

import traceback
from test.testing import testcase
from testers import *

def run_testcase():
    try:
        main(module=testcase, action='simulate')
    except Exception as e:
        tb = traceback.format_exc()
        raise Exception(tb)

所以捕获了任何异常(这是一个很宽的网络,您可能希望将其更改为更具体的东西),堆栈跟踪在tb中存储为字符串,然后重新加载 - 所以RF抓住它,将关键字标记为失败,并且第一部分中的代码记录它。