8、Robot 递归 Keyword dryrun error: Maximum limit of started keywords exceeded【robot framework】

文章讲述了在RobotFramework中编写递归关键字时,如何使用RunKeyword或CallMethod避免Python默认递归深度限制,以及提供了一个错误和正确示例以提取json数据中的特定值。
摘要由CSDN通过智能技术生成

写了一个递归Keyword, 运行的时候很正常,但是dryrun却总是报错:Maximum limit of started keywords exceeded.

在Robot Framework中,递归关键字通常使用 Run Keyword 或 Call Method 来调用自身。这是因为直接调用自身可能会导致递归深度超出Python的默认限制(通常为1000层),而使用 Run Keyword 或 Call Method 可以绕过这个限制。

Run Keyword 和 Call Method 都会将关键字的调用委托给Robot Framework的执行上下文,从而允许在执行关键字时控制递归深度。这样可以确保递归关键字在运行时不会超出递归深度限制,从而避免因此导致的错误。

因此,为了在递归关键字中控制递归深度并避免超出Python的默认限制,推荐使用 Run Keyword 或 Call Method 来调用自身。

以下例子是实现从字典结构的json数据获取特定元素的值。

错误写法:

Get Value From Json

    [Arguments]    ${json_data}    ${key_name}

    Set Test Variable   ${result}   ${None}

    :FOR    ${key}    IN    @{json_data.keys()}

    \    ${value}=    Get From Dictionary   ${json_data}    ${key}

    \    Run Keyword If    '${key}' == '${key_name}'   Run Keywords   Set Test Variable   ${result}   ${value}   AND

         ...   Exit for Loop

    \    ${is_dict}=      Evaluate     isinstance($value, dict)

    \    Run Keyword If    '${is_dict}'=='True'   Run Keyword    Get Value From Json   ${value}   ${key_name}

    [Return]    ${result}

正确写法:


 

Get Value From Json

    [Arguments]    ${json_data}    ${key_name}

    Set Test Variable   ${result}   ${None}

    :FOR    ${key}    IN    @{json_data.keys()}

    \    ${value}=    Get From Dictionary   ${json_data}    ${key}

    \    Run Keyword If    '${key}' == '${key_name}'   Run Keywords   Set Test Variable   ${result}   ${value}   AND

         ...   Exit for Loop

    \    ${is_dict}=      Evaluate     isinstance($value, dict)

    \    Run Keyword If    '${is_dict}'=='True'   Run Keyword    Call Method    Get Value From Json   ${value}   ${key_name}

    [Return]    ${result}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值