Robotframework 为什么套件变量的值在从资源文件导入后丢失?

Robotframework 为什么套件变量的值在从资源文件导入后丢失?,robotframework,Robotframework,从我在中读到的关于变量作用域和导入资源文件的内容来看,我认为这是可行的(python 2.7,RF 2.8.7): 测试文件: *** Settings *** Resource VarRes.txt Suite Setup Preconditions *** Variables *** *** Test Cases *** VarDemo Log To Console imported [${TODAY}] *** Keywords ***

从我在中读到的关于变量作用域和导入资源文件的内容来看,我认为这是可行的(python 2.7,RF 2.8.7):

测试文件:

*** Settings *** 
Resource          VarRes.txt 
Suite Setup       Preconditions

*** Variables ***

*** Test Cases ***
VarDemo
    Log To Console    imported [${TODAY}]

*** Keywords *** 
资源文件:

*** Settings ***
Library           DateTime

*** Variables ***
${TODAY}          ${EMPTY}    # Initialised during setup, see keyword Preconditions

*** Keywords ***
Format Local Date
    [Arguments]    ${inc}    ${format}    
    ${date} =    Get Current Date    time_zone=local    increment=${inc} day    result_format=${format}
    [Return]    ${date}    # formatted date

Preconditions
    ${TODAY} =   Format Local Date    0    %Y-%m-%d
    Log To Console    inited [${TODAY}]
然而,结果是:

inited [2015-03-20]
imported []
RF文件说明:

测试套件范围内的变量在测试中的任何位置都可用 定义或导入它们的套件。它们可以在中创建 变量表,从资源导入,


我想这是在这里完成的。

如果我像这样在关键字前提条件中添加一行,它会起作用:

Preconditions
    ${TODAY} =   Format Local Date    0    %Y-%m-%d
    Set Suite Variable  ${TODAY}
    Log To Console    inited [${TODAY}]
原因是在第一行中定义了一个局部变量,而不是初始化变量表中声明的测试套件变量。RF doc中有一段提示:

在测试执行期间使用返回值设置的变量 从关键字或始终使用设置测试/套件/全局变量关键字 覆盖设置范围内可能存在的变量


我认为RF的一个主要缺点是不能在变量表中动态定义变量。我尽量避免在关键字中设置变量的作用域。

对于动态变量,可以使用Python中的变量文件。见本节

例如,我将variables.py用于:

if platform.system() in ['Darwin', 'Linux']:
    OS_FAMILY = 'unix'
elif platform.system() == 'Windows':
    OS_FAMILY = 'windows'
else:
    OS_FAMILY = 'unknown'
OS_FAMILY_IS_UNIX = OS_FAMILY == 'unix'      
OS_FAMILY_IS_WINDOWS = OS_FAMILY == 'windows'   
然后在Robot测试中,我可以在任何地方使用动态变量${OS_FAMILY}、${OS_FAMILY_IS_UNIX}和${OS_FAMILY_IS_WINDOWS}

您应该能够创建${TODAY}变量