Robotframework 有可能在机器人框架中有一个可变跨度的多条线吗?

Robotframework 有可能在机器人框架中有一个可变跨度的多条线吗?,robotframework,Robotframework,我有一个很长的正则表达式,我想把它放入一个变量中进行测试。我希望能够把它放在多行上,这样就不会太难读了。我看到您可以使用documentation标记执行多行操作。但当我尝试这种格式时,Robot似乎认为这是一个列表。有没有一种方法可以在Robot框架中实现这一点 考虑: ${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 ad

我有一个很长的正则表达式,我想把它放入一个变量中进行测试。我希望能够把它放在多行上,这样就不会太难读了。我看到您可以使用documentation标记执行多行操作。但当我尝试这种格式时,Robot似乎认为这是一个列表。有没有一种方法可以在Robot框架中实现这一点

考虑:

${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'
我希望能够写:

${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'
在变量表中 如果要在
***变量***
表中创建字符串,可以将定义分散到多行。您可以使用一个特殊的参数
分隔符
来定义单元格是如何连接在一起的。默认情况下,这些行由一个空格连接,因此您希望通过显式地不给分隔符
一个值,将其设置为空字符串

有关详细信息,请参见《用户手册》中的

*** 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 ***
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}'

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

test.robot
***变量***
${example_regex}=分隔符=
...  (?m)将IP地址设置为[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\.[0-9]{1,3}\\n
...  正在将MAC地址设置为[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
...  设置IP转发内核选项
***测试用例***
显示输出
Log\n${example_regex}控制台=是
robot测试。robot
==============================================================================
试验
==============================================================================
显示输出
(?m)将IP地址设置为[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}\n将MAC地址设置为[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{
显示输出|通过|
------------------------------------------------------------------------------
测试|通过|
1个关键测试,1个通过,0个失败
共1个测试,1个通过,0个失败
==============================================================================
请注意:

  • 所有前导和尾随空格都从每一行中删除
  • 第一行中的普通
    分隔符=
    不指定分隔符

你也可以考虑使用,因为你得到了Python文字格式的所有功能,这使得维护复杂的正则表达式变得更容易。如果您使用的是Robot Framework 3+和Python 3.5+(用于

f
-strings),那么它可能看起来像:

vars.py
ip地址模式=r'[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' 下地址模式='[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}' 示例_regex=( rf'(?m)将IP地址设置为{IP地址\模式}\n' rf'将MAC地址设置为{lower\u MAC\u address\u pattern}\n' '设置IP转发内核选项' )
test.robot
***设置***
变量vars.py
***测试用例***
显示输出
Log\n${example_regex}控制台=是

其结果与上述相同。

之前的机器人框架2.9可以使用python函数:

*** Variables ***

@{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'

*** Test Cases ***

MultiLine
  ${example_regex}=  Evaluate  "".join(${example_regex})
  Log  "\n"${example_regex}
结果:

20190813 14:02:39.421 - INFO - ${example_regex} = (?m)Setting IP address to [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
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}
Setting IP forwarding kernel option...

这是一种非常有用的技术。我的变量要求使用${SPACE}变量在行尾强制使用空格字符。对于想要换行的人,在文本中放入
\n
${\n}