1.列表使用@还是$
1、若想把列表用Set Global Variable设置全局变量时,必须用@,当使$设置全局变量时为字符串。
Set Global Variable ${name} Jack
Set Global Variable @{animals} cat monkey duck dog
2、使用FOR循环遍历列表时,必须使用@
@{animals} Create List cat monkey duck dog
使用 Create List创建列表时,使用@还是$都可以。
:FOR ${a} IN @{animals}
\ Log ---${a}---会打印
---cat---
---monkey---
---duck---
---dog---
:FOR ${a} IN ${animals}
\ Log ---${a}---会打印
---[u'cat', u'monkey', u'duck', u'dog']---
很明显,FOR循环中使用@遍历animals时,会一一遍历animals中的每一项,但FOR循环中使用$遍历animals时,会把animals当做一个整体打印输出。
3、列表作为关键字入参时,一定要统一形参和实参的形式,要么形参使用@,实参传递@,要么形参使用$,实参传递$,建议统一使用$,因为传递@会涉及拆解包的问题。
*** Keywords ***
计算数字之和
[Arguments] @{numbers}
${sum} Set Variable 0
: FOR ${i} IN @{numbers}
\ ${sum} Evaluate ${sum}+${i}
\ Log ${sum}*** Test Cases ***
case01
${nums} Create List 1 2 3 4
计算数字之和 @{nums}
*** Keywords ***
计算数字之和
[Arguments] ${numbers}
${sum} Set Variable 0
: FOR ${i} IN @{numbers}
\ ${sum} Evaluate ${sum}+${i}
\ Log ${sum}*** Test Cases ***
case01
${nums} Create List 1 2 3 4
计算数字之和 ${nums}
2.Comment PAUSE只能在robotframework的ide环境即RIDE中有效,如果用robot命令行的方式执行用例,Comment PAUSE无效。
3. 变量 Run Keyword If 条件 关键字1 ELSE 关键字2
条件成立时,运行关键字1,并把关键字1的返回值赋予变量;条件不成立时,运行关键字2,并把关键字2点返回值赋予变量。
${month} Set Variable 1
: FOR ${i} IN RANGE 16
\ ${month} Run Keyword If ${i}>11 Evaluate ${month}%12
\ ... ELSE Set Variable ${month}特别注意,当没有ELSE分支的时候,当条件不满足时,${month}会为None,而不是为1。
4.变量 Set Variable If 条件 值1 值2
条件成立时,变量为值1;条件不成立时,变量为值2。
${year} Set Variable 2021
: FOR ${i} IN RANGE 16
\ ${year} Set Variable If ${i}>11 2022 ${year}特别注意,当没有为条件不满足时的${year}设置默认值时(${year}),${year}为None,而不是为2021。
5.在对字符串用in或not in进行关系判断时,报错SyntaxError: EOL while scanning string literal (<string>, line 1)
case003
${out} Evaluate os.popen('ifconfig lo').read() modules=os
Log ----${out}----
Run Keyword If '127.0.0.1' in '${out}' Log YES
... ELSE Log NOEvaluating expression ''127.0.0.1' in 'lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16384
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 181175 bytes 264236464 (251.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 181175 bytes 264236464 (251.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0'' failed: SyntaxError: EOL while scanning string literal (<string>, line 1)
这是换行符导致的,替换掉换行符,或者将多行字符串按行进行处理
case003
${out} Evaluate os.popen('ifconfig lo').read() modules=os
Log ----${out}----
${out} Replace String ${out} ${\n} ${EMPTY}
Log ----${out}----
Run Keyword If '127.0.0.1' in '${out}' Log YES
... ELSE Log NO
6.*** Variables ***中设置的变量的作用域问题
在*** Variables ***中设置的变量为全局变量,并且可以在Suite Setup和Test Setup直接引用,也就是说,*** Variables ***中设置的变量生效时间要先于测试套件和测试用例中的Setup。
========================以上,2024-07-22更新===============================