可以在关键字“运行关键字”内分配变量吗?

Far*_*ram 6 testing automated-tests robotframework

以下代码产生了一些问题:

API Setup
[Arguments]                           ${url}                           ${username}    ${password}    ${run}=True    ${fail}=False
Run Keyword If                        ${run}
...  Run Keywords     
     ...  ${passed}=                  Run Keyword And Return Status    Setup          ${url}         ${username}    ${password}
     ...  AND  Log To Console         ${passed}
     ...  AND  Should Not Be Equal    ${fail}                          ${passed}
Run Code Online (Sandbox Code Playgroud)

当我尝试执行它时,我的 RF 说:Variable '${passed}' not found.

RED IDE 还说

Multiple markers at this line:
  • Variable 'passed' is used, but not defined
  • Keyword name '${passed}=' contains variables. RED is unable to validate 
    arguments given to this keyword
Run Code Online (Sandbox Code Playgroud)

关键字“运行关键字”是否不允许为变量分配任何值,如果是,是否有任何“最佳实践”方法可以做我想做的事情?

谢谢!

Tod*_*kov 4

Run Keywords不允许分配,这是真的。这来自解析器 - 关键字的目的是运行其他的;它到达带有赋值(${passed}= Run...)的行,尝试用其值替换“传递”的变量,以便它可以执行它,但此时 var 仍然未定义 - 并且失败。

看起来您想要做的是Setup仅当条件为真时才运行特定关键字 ( ),并且仅当条件为真时才记录其结果,并断言它(结果)是所需的结果。

这可以通过将块分成两部分来实现。关键字Run Keyword If返回嵌入关键字的值,因此这将起作用:

${passed}=    Run Keyword If    ${run}    Run Keyword And Return Status    Setup          ${url}         ${username}    ${password}
                             ...    ELSE    Set Variable    ${False}
Run Code Online (Sandbox Code Playgroud)

如果${run} == True关键字Setup将被运行,并且{passed}将保存 True/False 值,则执行通过。如果 ${run} != True我们设置${passed}为 False,那么它的值就不会为 None(在这种情况下,它的值并不重要,但这样做可以保证它所具有的数据类型的一致性)。

现在,其他两个关键字可以单独位于 if 块中 - 仅在以下情况下执行其工作${run} == True:

Run Keyword If    ${run}   Run Keywords     Log To Console         ${passed}
 ...  AND  Should Not Be Equal    ${fail}    ${passed}
Run Code Online (Sandbox Code Playgroud)