Robotframework 在robot框架中设置条件生成选项

Robotframework 在robot框架中设置条件生成选项,robotframework,Robotframework,在特定测试的robot文件中,我将变量uarts_to_test定义为变量下的数值列表: *** Variables *** ${uarts_to_test} ['0', '1', '2', '3'] 现在,我想循环遍历这个列表,并为UART测试中列出的每个数字创建define-DTEST_UART,其中#是UART索引。我还想将所有这些定义添加到变量${make_options}。我尝试在关键字下创建一个简单的例程: *** Keywords *** Determine which u

在特定测试的robot文件中,我将变量uarts_to_test定义为变量下的数值列表:

*** Variables ***
${uarts_to_test}    ['0', '1', '2', '3']
现在,我想循环遍历这个列表,并为UART测试中列出的每个数字创建define-DTEST_UART,其中#是UART索引。我还想将所有这些定义添加到变量${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']

从错误
变量“${make\u options}”中找不到。
它表示在定义变量值之前,您正在分配变量
${make\u 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

这是我的解决方案。我将makeoptions返回为字符串,也返回为列表,以防列表中的项目需要额外的逻辑

*** 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:信息:-DTEST\u UART0-DTEST\u UART1-DTEST\u UART2 -DTEST\U UART3 20210602 23:24:59.596:信息:列表长度为4,它包含以下项:0:-DTEST\U UART0 1:-DTEST\U UART1 2: -DTEST\U UART23:-DTEST\U UART3


我尝试了你的解决方案,但是
${make_options}
有额外的“u”,我不明白为什么<代码>[u'-DTEST\u UART0',u'-DTEST\u UART2',u'-DTEST\u UART3']尽管我在***关键字***下放置了
确定要测试哪个uart
。这很有效,谢谢!虽然我想知道什么需要行
${uarts\u to_test}Evaluate${uarts\u to_test}
?“${uarts\u to_test}Evaluate${uarts\u to_test}行需要什么?”->它用于将标量${uarts\u to_test}的字符串值转换为一个列表,以便您可以迭代其中的项。没有它,${uarts\u to\u test}的类型只是一个纯字符串。