Robotframework 在robot框架中设置条件生成选项
在特定测试的robot文件中,我将变量uarts_to_test定义为变量下的数值列表: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
*** 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}的类型只是一个纯字符串。