【问题标题】:RobotFramework: empty variable check suddenly not working anymoreRobotFramework:空变量检查突然不再起作用
【发布时间】:2021-04-03 20:03:47
【问题描述】:

我正在使用命令行参数,并且在不提供命令行参数的情况下同时使用 / 的东西,但是如果我不提供命令行参数,它突然开始失败。

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

之前工作的code-sn-p是:

*** 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

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

*** 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(是的,我知道很古老)

【问题讨论】:

  • 您可以将条件直接放入 if Run Keyword If '${VAR}'=='test'。此外,如果您没有从命令行传递此变量并且您在 ***Variable*** 中没有它,那么它将不存在。之前它工作时你不是从命令行传递的吗?
  • @BenceKaulics:当我第一次尝试没有设置任何***Variable*** 并且没有在命令行上传递参数时,它确实起作用了。但是从您的评论中,我得出结论,它不应该那样工作;-) 再次感谢。
  • 顺便说一句。我把它放在Run Keyword If 之外,因为在最终脚本中,我们有 2 条可能的路径:1 应该在 VAR==test 时采用,另一个如果评估为 False (所以我不得不把它放在 Run Keyword Unless 部分使用相同的条件检查)。
  • 我从未听说过使用${ VAR} 的技巧。如果它起作用了,那很可能是偶然的。这当然不是记录在案的功能。

标签: robotframework


【解决方案1】:

设法通过将带有一些默认值的${VAR} 添加到*** Variables *** 列表来解决它。但我仍然不明白为什么它最初在没有该列表的情况下工作。

【讨论】:

    【解决方案2】:

    如果您想检查变量是否为空并以此为基础做一些事情,您的测试应该是这样的。

    *** 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
    ==============================================================================
    

    附:关于变量内的空间,我认为这只是 Google Groups 中的错字。如果它正在工作,那么变量可能是全局可访问的或在其他地方定义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 2011-02-09
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      相关资源
      最近更新 更多