Robot Framework的测试数据使用反斜杠(\\
)作为转义字符, 此外还增加了 built-in variables
_${EMPTY}
和 ${SPACE}
经常用来作为转义. 不同的转义策略在下面的小节中详细讨论.
转义特殊字符
反斜杠可以用来转义特殊字符, 这样我们就能使用它们的字面值了.
转义特殊字符
Character | Meaning | Examples |
---|---|---|
\$ |
转义美元符号,永远不会启动[标量变量] | \${notvar} |
\@ |
转义@符号,永远不会启动[列表变量] | \@{notvar} |
\% |
转义百分号,永远不会启动[环境变量] | \%{notvar} |
\# |
转义#,不会被认为是注释 | \# not comment |
\= |
转义成等号,不会认为是命名参数 | not\=named |
| |
转义‘|’,不会被认为是管道符号 | | Run| ps \| grep xxx| |
\\ |
转义反斜杠 | c:\\temp, \\${var} |
提示
译注: 上表第2列, 原文是 Dollar sign, never starts a scalar variable.
, 感觉直译有些奇怪, 所以这里直接给出这些字符的原来作用是什么, 而后面的例子表示 经过转义后, 这些字符就失去了原来的作用.
转义序列
反斜杠还可以用来创建特殊的转义序列(escape sequence), 这些转义序列所代表的意义很难(甚至不可能) 在测试数据中通过普通字符表示.
转义序列
Sequence | Meaning | Examples |
---|---|---|
\n |
Newline character. | first line\n2nd line |
\r |
Carriage return character | text\rmore text |
\t |
Tab character. | text\tmore text |
\xhh |
Character with hex value hh . |
null byte: \x00, ä:\xE4 |
\uhhhh |
Character with hex value hhhh . |
snowman: \u2603 |
\Uhhhhhhhh |
Character with hex value hhhhhhhh . |
love hotel: \U0001f3e9 |
注解
在测试数据中的所有字符串, 包括 \x02
这种字符, 都是Unicode. 如果有需要的话, 必须明确地转换. 转换的方法可以使用 BuiltIn_
关键字 Convert To Bytes 或 String_
库中的 Encode String To Bytes. 或者在Python代码中使用类似于 str(value)
和 value.encode('UTF-8')
的方法.
注解
如果在 \x
\u
或 \U
转义符后面跟了非法的十六进制数, 则解析的结果是保留原始的字符, 反斜杠除外. 例如, \xAX
(X不是十六进制), \U00110000
(值太大了) 解析的结果分别是 xAX
和 U00110000
. 不过, 这种情况可能会在将来有所改变.
注解
如果需要用与操作系统无关的换行符(Windows中是 \r\n
, 其它系统是n
), 可以使用 Built-in variable
_${\n}`.
注解
跟在 \n
后面的未经转义的空格会被忽略. 也就是说, two lines\nhere
和 twolines\n here
是等价的. 这样做的动机是在使用HTML格式时, 能包裹包含换行符的长行, 不过同样的逻辑对其它格式也一样. 该规则的一个特殊情况是在 extended variable syntax
_ 中的空白符不会忽略.
注解
\x
, \u
和 \U
等转义序列在Robot Framework 2.8.2版本新引入.
避免忽略空单元格
如果需要使用空值, 例如作为关键字的参数, 必须明确地转义以避免被框架 忽略. 不管使用哪种数据格式, 空的收尾单元格必须被转义. 当使用 空格分隔的格式时, 所有的空值都必须被转义.
空的单元格既可以使用反斜杠转义, 也可以使用 内置变量 ${EMPTY}
. 特别推荐使用后者, 因为更清楚易懂. 一个特殊情况是在 空格分隔的格式中使用 FOR循环时, 缩进的单元格中应使用反斜杠. 所有这些情况都在下面的例子中进行了说明, 先是HTML格式, 然后是空格分隔的纯文本格式:
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Using backslash | Do Something | first arg | \ | |
Using ${EMPTY} | Do Something | first arg | ${EMPTY} | |
Non-trailing empty | Do Something | second arg | # No escaping needed in HTML | |
For loop | :FOR | ${var} | IN | @{VALUES} |
Log | ${var} | # No escaping needed here either |
*** Test Cases ***
Using backslash
Do Something first arg \
Using ${EMPTY}
Do Something first arg ${EMPTY}
Non-trailing empty
Do Something ${EMPTY} second arg # Escaping needed in space separated format
For loop
:FOR ${var} IN @{VALUES}
\ Log ${var} # Escaping needed here too
避免忽略空格
因为领头的, 收尾的, 以及连续的空格在单元格中都将被忽略, 如果这些空格有需要保留的话, 例如作为关键字的参数, 则必须经过转义. 和避免忽略空单元格类似, 既可以使用反斜杠, 也可以使用 内置变量${SPACE}
.
Escaping with backslash | Escaping with ${SPACE} |
Notes |
---|---|---|
\ leading space | ${SPACE}leading space |
|
trailing space \ | trailing space${SPACE} |
反斜杠必须跟在空格后面. |
\ \ | ${SPACE} |
两边都需要反斜杠. |
consecutive \ \ spaces | consecutive${SPACE *3}spaces |
使用 扩展变量语法 |
如上例所示, 使用 ${SPACE}
变量是测试数据更容易理解. 当需要不止一个空格时, 结合 扩展变量语法使用时, 显得尤其方便.