Robotframework:如果作为变量传递,则无法为Run Keyword的变量设置Suite变量

时间:2017-03-13 05:47:17

标签: robotframework

我尝试为不同的案例生成唯一名称,并使用最少的关键字将该唯一名称设置为Suite变量,但无法执行此操作, 有人可以帮我解决这个问题,这是我的代码..

*** Test Cases ***

TC100_Unique Variable Checking
Generate Unique Name for Objects-loop    Product Line
Generate Unique Name for Objects-loop    Models
Generate Unique Name for Objects-loop    Portfolio

*** Keywords ***    
Generate Unique Name for Objects-loop
[Arguments]    ${function}
Set Variable    ${function}
${namePL}=    Run Keyword If    '${function}'=='Product Line'    Run      Keywords    Generate Unique Name    PL-RFT-    ${CURDIR}\\fNameEdit.txt
...    Set Suite Variable    ${namePL}
${nameMOD}=    Run Keyword If    '${function}'=='Models'    Run Keywords    Generate Unique Name    MOD-RFT-    ${CURDIR}\\modNameEdit.txt
...    Set Suite Variable    ${nameMOD}
${namePF}    Run Keyword If    '${function}'=='Portfolio'    Run Keywords    Generate Unique Name    PF-RFT-    ${CURDIR}\\pfNameEdit.txt
...    Set Suite Variable    ${namePF}

Generate Unique Name
[Arguments]    ${suffix}    ${filepath}
${name}=    Get String Plus Number    ${suffix}    ${filepath}
Set Test Variable    ${name}
Write Unique Number    ${filepath}
[Return]    ${name}

错误:

  

找不到变量'$ {namePL}'。

3 个答案:

答案 0 :(得分:1)

最后,我可以在一个关键字中发现一个解决方案。这是简单的代码。

 Run Keyword If    '${function}'=='Products'    Run Keywords    Generate  Unique Name    PL-RFT-    ${CURDIR}\\fNameEdit.txt    AND
...    Set Suite Variable    ${namePL}    ${name}

感谢您的所有意见。

答案 1 :(得分:0)

Run If语句允许执行多个关键字,但是,根据在同一Run If上下文中设置的值设置变量是这里的真正问题。我的建议是将ID的生成和重用分成两个不同的语句。

答案 2 :(得分:0)

考虑这段代码:

  filter :user_exclude, :as => :select, :collection => proc { User.all.map { |i| [ i.to_s, i.id ] } }

在其他关键字已经运行之后,这将创建一个名为${namePL}= Run Keyword If '${function}'=='Product Line' Run Keywords Generate Unique Name PL-RFT- ${CURDIR}\\fNameEdit.txt ... Set Suite Variable ${namePL} 的变量。但是,您尝试将${namePL}作为其中一个关键字进行调用,但在 Set Suite Variable完成之前将其称为,因此在Run keyword if之前创建