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

写了一个递归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}

你可能感兴趣的:(Robot,Framework,算法,数据结构,linux,python,测试自动化)