gpt4 book ai didi

python - 使用 Robot Framework 中的内置函数的自定义关键字中出现预期错误

转载 作者:行者123 更新时间:2023-12-01 00:59:00 25 4
gpt4 key购买 nike

我的自定义 Robot Framework 库中有一个以下示例关键字,它使用 Robot Framework 的内置库使用参数调用测试序列中的另一个关键字:

# MyLibrary.py
from robot.libraries.BuiltIn import BuiltIn

class MyLibrary(object):
def run_a_keyword(self, keywordName):
builtinLib = BuiltIn().get_library_instance("BuiltIn")
parameters = ['hi', 'second param']
# Runs the keyword with the given parameters
builtinLib.run_keyword(keywordName, *parameters)

例如,我将运行以下简化测试,通过测试错误来检查关键字是否有效:

*** Settings ***
Library MyLibrary.py

*** Test Cases ***
Test Case
Run A Keyword My Keyword
Run Keyword And Expect Error Keyword 'Another Keyword' expected 3 arguments, got 2. Run A Keyword Another Keyword

*** Keywords ***
My Keyword
[Arguments] ${arg1} ${arg2}
Log To Console Keyword Executed

Another Keyword
[Arguments] ${arg1} ${arg2} ${arg3}
Log To Console Keyword Executed

我预计这个测试用例会通过,但是在第二步中测试用例失败了Run Keyword and Expect Error尽管我已经声明错误是预计?

我的解决方法是捕获builtInLib在我的关键字内的调用抛出的异常并重新抛出它,之后使用Run Keyword And Expect Error的测试序列正常工作:

def run_a_keyword(self, keywordName):
builtinLib = BuiltIn().get_library_instance("BuiltIn")
parameters = ['hi', 'second param']
try:
builtinLib.run_keyword(keywordName, *parameters)
except Exception as err:
raise Exception(err.message)

但是,我需要一个监听器将错误传递给服务:

class MyListener(object):
ROBOT_LISTENER_API_VERSION = 2
ROBOT_LIBRARY_SCOPE = 'GLOBAL'

def __init__(self):
self.ROBOT_LIBRARY_LISTENER = self

def log_message(self, message):
level = message['level']
if level == 'FAIL':
send_the_error_to_somewhere(message['message'])

log_message 被调用两次(当调用内置函数时和当我引发新异常时)。这会导致相同的错误被处理并记录两次,这不是我想要的。

那么:如何使用调用内置函数的关键字来Run Keyword And Expect Error并且仍然只处理一次错误?

最佳答案

首先,Run Keyword And Expect Error 不处理语法错误 - 请参阅其文档,它在末尾清楚地说明了这一点,并且 also its implementation - 此错误属于 dont_continue 类别。
您将 2 个参数传递给具有 3 个必需参数的关键字,这显然是一个语法错误。

<小时/>

为什么log_message被调用/存储错误两次?因为会引发两种异常 - 一种是在 RF 的内置关键字中,另一种是当您在自定义关键字中重新引发它时。框架在每个异常中都记录致命级别,因此您得到 2。

我想到的第一个解决方案是通过消息内容本身与日志处理程序进行通信。
最优化的解决方案是修改异常,例如添加一个带有设定值的属性“生产者”,并检查处理程序hasattr(err, '生产者'),但是它无法再访问异常,只能访问消息文本。使用特殊标识符作为错误消息的前缀:

except Exception as err:
raise Exception("SPECIAL_IDENTIFIER:{}".format(err.message))

,然后仅当有它时才发送_the_error_to_somewhere:

if level == 'FAIL' and message['message'].startswith('SPECIAL_IDENTIFIER:'):
# get rid of the special identifier prefix, and then
send_the_error_to_somewhere(message['message'])

关于python - 使用 Robot Framework 中的内置函数的自定义关键字中出现预期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55970562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com