Robotframework 为什么套件变量的值在从资源文件导入后丢失?
从我在中读到的关于变量作用域和导入资源文件的内容来看,我认为这是可行的(python 2.7,RF 2.8.7): 测试文件: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 ***
*** 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}变量