在机器人框架中设置条件 make 选项

Set conditional make options in the robot framework

在我用于特定测试的机器人文件中,我将变量 uarts_to_test 定义为变量下的数值列表:

*** Variables ***
${uarts_to_test}    ['0', '1', '2', '3']

现在我想遍历此列表,并创建定义 -DTEST_UART#,其中 # 是 uart 索引,对于 uarts_to_test[=21 中列出的每个数字=].我还想将所有这些定义添加到变量 ${make_options}。我试图在关键字下创建一个简单的例程:

*** Keywords ***
Determine which uarts to test
[Arguments]    @{uarts_to_test}
:FOR    ${item}    IN    @{uarts_to_test}
\    IF List Should Contain Value ${i}
\        ${make_options} = ${make_options} -DTEST_UART${i}

但我只得到错误:

Variable '${make_options}' not found.

我无法在您的代码中找到 ${i}。也没有 ${make_options} 的声明,这可能是找不到它的原因。您可以使用集合库,创建列表并将项目附加到它。像这样

***Settings***
    Library    Collections
    
    *** Variables ***
    @{uarts_to_test}    0    1    2    3
    
    ***Test Cases***
    test
        @{make_options}=    Create List
        FOR    ${uart}    IN    @{uarts_to_test} 
            Append To List    ${make_options}    -DTEST_UART${uart}
        END
        Log    ${make_options}

这将在您的 ${make_options} 的日志中:

['-DTEST_UART0', '-DTEST_UART1', '-DTEST_UART2', '-DTEST_UART3']

从错误 Variable '${make_options}' not found. 中它说您正在分配变量 ${make_options},然后再定义它的值。

如果你以循环的第一次迭代为例,你的变量 ${make_options} 之前没有定义,你正在将它分配给一个变量。

您可以简单地定义一个变量 ${mytext} 并在循环中连接它,如下所示:

*** Setting ***
Documentation     test1


*** Variables ***
@{uarts_to_test}    0    1    2    3    4
${mytext}    'DTEST_UART'

*** Test Cases ***
demo testing
    Determine which uarts to test    @{uarts_to_test}


*** Keywords ***
Determine which uarts to test
    [Arguments]    @{uarts_to_test}
    FOR    ${item}    IN    @{uarts_to_test}
    \    ${make_options}=     Catenate     ${mytext}    ${item}
    \    Log To Console     ${make_options} 

控制台输出:

'DTEST_UART' 0
'DTEST_UART' 1
'DTEST_UART' 2
'DTEST_UART' 3
'DTEST_UART' 4

这是我的解决方案。我 return 将选项设置为字符串和列表,以防列表中的项目需要额外的逻辑。

*** Settings ***
Library    Collections    

*** Variables ***
${uarts_to_test}    ['0', '1', '2', '3']

*** Test Cases ***
MakeOptionsTest
    ${make_options}    ${make_optionsList}    Determine which uarts to test    ${uarts_to_test}
    Log    ${make_options}
    Log List    ${make_optionsList}       
        
*** Keywords ***
Determine which uarts to test
    [Arguments]    ${uarts_to_test}
    ${make_optionsList}    Create List    
    ${uarts_to_test}    Evaluate    ${uarts_to_test}
    :FOR    ${item}    IN    @{uarts_to_test}
    \    Append To List    ${make_optionsList}    -DTEST_UART${item}
    ${make_options}   Evaluate    " ".join(${make_optionsList})
    [Return]    ${make_options}    ${make_optionsList}

控制台输出:

20210602 23:24:59.595 : INFO : -DTEST_UART0 -DTEST_UART1 -DTEST_UART2 -DTEST_UART3 20210602 23:24:59.596 : INFO : List length is 4 and it contains following items: 0: -DTEST_UART0 1: -DTEST_UART1 2: -DTEST_UART2 3: -DTEST_UART3