在机器人框架中设置条件 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
在我用于特定测试的机器人文件中,我将变量 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