在Robot Framework中是否可以使用变量跨越多行?

sie*_*sta 20 robotframework

我有一个很长的正则表达式,我想把它放入一个变量来测试.我希望能够把它放在多行上,这样它就不那么难以理解了.我看到你可以用文档标签做多行.但是当我尝试这种格式化时,Robot似乎认为这是一个列表.有没有办法在Robot Framework中执行此操作?

考虑:

${example_regex} =      '(?m)Setting IP address to [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\nSetting MAC address to [0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}\nSetting IP forwarding kernel options'
Run Code Online (Sandbox Code Playgroud)

我想能够写:

${example_regex}   '(?m)Setting IP address to [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\n
                     Setting MAC address to [0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}\n
                     Setting IP forwarding kernel options'
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 25

不幸的是,Robot Framework不直接支持多行文字字符串.但是,您可以使用测试用例或关键字中的catenate关键字来加入跨多个单元格的数据,从而获得相同的效果.请确保正确转义反斜杠,如果不想在数据中添加换行符,请将分隔符设置为空字符串.

例如:

*** Test Cases ***
Multiline variable example
  ${example_regex}=  catenate  SEPARATOR=
  ...  (?m)Setting IP address to [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\n
  ...  Setting MAC address to [0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}\\n
  ...  Setting IP forwarding kernel options
  log  regex: '${example_regex}'
Run Code Online (Sandbox Code Playgroud)


Chr*_*unt 8

Robot Framework 2.9 根据文档增加了对多行文字字符串的支持。

test.robot

*** Variables ***
${example_regex} =  SEPARATOR=
...  (?m)Setting IP address to [0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\n
...  Setting MAC address to [0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}\\n
...  Setting IP forwarding kernel options

*** Test Cases ***
Show output
    Log  \n${example_regex}  console=yes
Run Code Online (Sandbox Code Playgroud)

robot test.robot

==============================================================================
Test
==============================================================================
Show output
(?m)Setting IP address to [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\nSetting MAC address to [0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}\nSetting IP forwarding kernel options
Show output                                                           | PASS |
------------------------------------------------------------------------------
Test                                                                  | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • 每行修剪所有前导和尾随空格
  • 一个普通的SEPARATOR=在第一行指定没有分隔

您还可以考虑使用变量文件,因为这样您就可以获得Python文字格式设置的所有功能,这可以使维护复杂的正则表达式之类的操作变得更加容易。如果您使用的是Robot Framework 3+和Python 3.5+(用于f-strings),则其外观如下:

vars.py

ip_address_pattern = r'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
lower_mac_address_pattern = '[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}'
example_regex = (
  rf'(?m)Setting IP address to {ip_address_pattern}\n'
  rf'Setting MAC address to {lower_mac_address_pattern}\n'
    'Setting IP forwarding kernel options'
)
Run Code Online (Sandbox Code Playgroud)

test.robot

*** Settings ***
Variables  vars.py

*** Test Cases ***
Show output
    Log  \n${example_regex}  console=yes
Run Code Online (Sandbox Code Playgroud)

结果与上述相同。