在表达式中使用变量时出现“名称未定义”错误

Jef*_*eff 2 robotframework

我正在尝试使用从命令行传入变量的单个测试用例来测试多个环境。使用以下命令行:

robot --variable TESTENV:prod advertisingdisclosure_Page.robot
Run Code Online (Sandbox Code Playgroud)

我需要测试 TESTENV 的值,并根据传入的值将不同的变量(特别是 URL)设置为适当的值。在测试用例的第一个关键字部分中使用以下代码时,我收到错误:

IF   ${TESTENV}  ==  "uat"
    $(MAIN_URL)=    Set Variable    ${env_data['uat_url']}
ELSE IF    ${TESTENV}  ==  "dev"
    ${MAIN_URL}=   Set Variable   ${env_data['dev_url']}
ELSE IF    ${TESTENV} == "prod"
    ${MAIN_URL}=   Set Variable   ${env_data["prod_url"]}
ELSE
    Fail    "No URL specified"
END
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Evaluating expression 'prod' failed: NameError: name 'prod' is not defined nor importable as module
Run Code Online (Sandbox Code Playgroud)

我找到的示例展示了如何直接使用全局变量,但没有展示如何评估它的特定值。

帮助。

杰夫

Tod*_*kov 6

您需要在变量名称两边加上引号 - 否则框架只是将其值放入,然后将该表达式传递给 python。因此,它就变成了prod == '"uat",并且 py 正确地抱怨没有定义的变量prod

修复很简单 - 只需将用法括在引号中,替换后这将成为字符串比较:

"${TESTENV}" == "uat"
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用另一种语法 - 没有大括号,它告诉 RF 使用/传递变量本身,而不是它的值,然后它将成为 python 的定义变量:

$TESTENV == "uat"
Run Code Online (Sandbox Code Playgroud)