RobotFramework:空变量检查突然不再工作

RobotFramework: empty variable check suddenly not working anymore

我正在玩弄命令行参数,并且在有/没有提供命令行参数的情况下都有一些工作,但是如果我不提供命令行参数,它突然开始失败。

https://groups.google.com/g/robotframework-users/c/_5Usp-K4Dlw?pli=1 上,我读到在变量前添加一个 space 并将其与这样的值进行比较 '${ VAR}'==<value> 应该可以检查变量是否存在。

之前有效的代码片段是:

*** Test Cases ***
My test
    [Documentation]    test to check if the SUT reacts as expected
    ${is_test}=        Evaluate    '${ VAR}'=='test'
    Log To Console     ${is_test}
    Run Keyword If     ${is_test}    Log To Console    VAR == test

将代码更改为(删除了“[Documentation]”,因为它是从另一个测试中复制的):

*** Test Cases ***
My test
    ${is_test}=        Evaluate    '${ VAR}'=='test'
    Log To Console     ${is_test}
    Run Keyword If     ${is_test}
    ...    Log To Console    VAR == test

它突然开始失败并出现:Variable '${ VAR}' not found. 错误。 改回原来的还是不行

我不知道我在更改中做错了什么。

注意:我工作的公司使用 RobotFramework 版本 3.0.4(是的,我知道很古老)

设法通过将具有一些默认值的 ${VAR} 添加到 *** Variables *** 列表来解决它。但是我仍然不明白为什么它最初没有那个列表就可以工作。

如果你想检查变量是否为空并根据它做一些事情,你的测试应该是这样的。

*** Variables ***
${VAR}=    test

*** Test Cases ***
My test
    Run Keyword If    '${VAR}'=='${EMPTY}'    Log To Console    Variable is empty
    ...    ELSE    Log To Console    Variable is not empty                                                         

如果您希望变量默认值为空,并且仅当它来自命令行时才执行某些关键字,请将变量设置为空,例如:

*** Variables ***
${VAR}=    ${EMPTY}

*** Test Cases ***
My test
    Run Keyword If    '${VAR}'=='${EMPTY}'    Log To Console    Variable is not set
    ...    ELSE    Log To Console    Variable is ${VAR}                                                         

运行 你从命令行测试而不传递变量

$ robot sample.robot 
==============================================================================
Sample                                                                        
==============================================================================
My test                                                               Variable is not set
My test                                                               | PASS |
------------------------------------------------------------------------------
Sample                                                                | PASS |
1 test, 1 passed, 0 failed
==============================================================================

现在,运行 带有传递变量

$ robot -v VAR:test sample.robot 
==============================================================================
Sample                                                                        
==============================================================================
My test                                                               Variable is test
My test                                                               | PASS |
------------------------------------------------------------------------------
Sample                                                                | PASS |
1 test, 1 passed, 0 failed
==============================================================================

P.S。关于 space 内部变量,我认为这只是 Google 组中的错字。如果它正在工作,那么变量可能是全局可访问的或在其他地方定义的。