首页 > 解决方案 > Robotframework 获得重复迭代

问题描述

在机器人框架中,我使用重复调用关键字 x 次。我想要的是在被调用的关键字中获取迭代次数。

我尝试了什么:

${iteration} =          0

*** Test Cases ***
Start Test
    repeat keyword  ${duration}  Run test iteration ${iteration}

*** Keywords ***
Run test iteration ${loop}
    ${iteration}=  Set Variable  evaluate  ${iteration}+1

我所期望的是,在报告中,被调用的关键字看起来像:

Run test iteration 0
Run test iteration 1
Run test iteration 2

但我看到

Run test iteration 0
Run test iteration 0
Run test iteration 0

是否有可能得到我预测的结果?

使用机器人框架 3.1.1

标签: robotframework

解决方案


是的,它是,这一切都归结为变量范围。
当您在关键字中进行赋值时,该变量具有关键字本地的范围 - 它在其中可见(而不是调用它的潜在关键字),并且在关键字完成时被删除。这与它与“变量”部分中定义的名称相同 - 您实际上是在重新定义一个具有相同名称的新名称,例如覆盖它。并且不以任何方式改变“全球”的价值。
然后在下一个循环中重复此操作,因此每次运行都会得到 0。

修复很简单——在改变值之后,声明你希望这个变量在更高的范围内可见(高于当前关键字)。您可以选择 3 - 案例级别、套件或全局(因此所有后续套件和案例都可以使用它);这是案例级别:

Run test iteration ${loop}
    ${iteration}=  Evaluate  ${iteration}+1
    Set Test Variable    ${iteration}

推荐阅读