else - robotframework builtin
¿Es posible tener una variable que abarque varias líneas en Robot Framework? (2)
Tengo una expresión regular muy larga que me gustaría poner en una variable para probar. Me gustaría poder ponerlo en varias líneas para que no sea tan ilegible. Vi que podías hacer varias líneas con la etiqueta de documentación. Pero cuando intento este formato, Robot parece pensar que esta es una lista. ¿Hay alguna manera de hacer esto en Robot Framework?
Considerar:
${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''
Me gustaría poder escribir:
${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''
Desafortunadamente, Robot Framework no admite directamente cadenas literales multilínea. Sin embargo, puede obtener el mismo efecto utilizando la palabra clave catenate en un caso de prueba o palabra clave para unir datos que se distribuyen en varias celdas. Asegúrese de escapar correctamente de sus barras invertidas y establezca el carácter separador en una cadena vacía si no desea nuevas líneas en los datos.
Por ejemplo:
*** 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 agregó soporte para cadenas literales multilínea según los documentos .
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
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
==============================================================================
Algunas notas:
- Todos los espacios en blanco iniciales y finales se recortan de cada línea
- Un
SEPARATOR=
simpleSEPARATOR=
en la primera línea especifica que no hay separador
También puede considerar el uso de archivos variables, ya que obtiene toda la potencia del formato literal de Python, lo que puede facilitar el mantenimiento de cosas como expresiones regulares complicadas. Si está utilizando Robot Framework 3+ y Python 3.5+ (para f
-strings) entonces puede verse como:
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''
)
test.robot
*** Settings ***
Variables vars.py
*** Test Cases ***
Show output
Log /n${example_regex} console=yes
Lo que resulta en la misma salida que el anterior.