【问题标题】:Stuff terminal command error into Robot Framework report将终端命令错误填充到 Robot Framework 报告中
【发布时间】:2017-11-10 20:50:05
【问题描述】:

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

我想要的只是一些关于如何在终端中捕获命令生成的错误并将其填充到机器人框架报告中的帮助。

这些是转储,我想在报告中记录。该命令是手动运行的:

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))

【问题讨论】:

    标签: robotframework


    【解决方案1】:

    如果终端上生成的错误意味着关键字失败并且您在运行期间在控制台中看到它,则使用关键字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)
    

    所以 any 异常被捕获(这是一个广泛的网络,您可能希望将其更改为更具体的内容),堆栈跟踪作为字符串存储在 tb 中,然后重新引发 -所以 RF 捕获它,将关键字标记为失败,并且第一部分中的代码记录它。

    【讨论】:

    • 谢谢@Todor - 非常有帮助。但是,运行期间的控制台错误是多行的,您提供的代码仍然没有记录控制台上转储的全部错误消息。此外,现在这个测试被标记为 PASS,即使它应该被标记为 FAIL。
    • 要在关键字失败的情况下失败,您必须根据${rc} 值显式调用它。我会将其添加到答案中;然后在问题中添加您在控制台中看到了什么,以及您希望在日志中显示什么。
    • 我在日志中添加了我想要显示的内容。顺便说一句,感谢您的帮助。
    • @pythonian 检查答案中的更新,我想我们到了:)
    • 太棒了。 @Todor 对 python 脚本进行了更改 - 我应该在 RF 端做些什么?
    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2015-10-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多