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))
答案 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抓住它,将关键字标记为失败,并且第一部分中的代码记录它。