En la biblioteca behave de Python, puedo escribir un archivo de características con un esquema de escenario parametrizado así (adaptado de este tutorial):

# feature file
Feature: Scenario Outline Example

  Scenario Outline: Use Blender with <thing>
    Given I put "<thing>" in a blender
    When I switch the blender on
    Then it should transform into "<other thing>"

    Examples: Amphibians
        | thing         | other thing |
        | Red Tree Frog | mush        |
        | apples        | apple juice |

Las definiciones de pasos correspondientes se verían así:

# steps file
from behave   import given, when, then
from hamcrest import assert_that, equal_to
from blender  import Blender

@given('I put "{thing}" in a blender')
def step_given_put_thing_into_blender(context, thing):
    context.blender = Blender()
    context.blender.add(thing)

@when('I switch the blender on')
def step_when_switch_blender_on(context):
    context.blender.switch_on()

@then('it should transform into "{other_thing}"')
def step_then_should_transform_into(context, other_thing):
    assert_that(context.blender.result, equal_to(other_thing))

Como se puede ver, la forma de pasar los parámetros del archivo de características a las funciones de paso es

  • al mencionarlos explícitamente en el archivo de características entre corchetes angulares
  • luego incluya las mismas palabras entre corchetes (¿por qué no volver a colocar los corchetes angulares?) en el decorador de la función de paso
  • y finalmente inserte estas palabras como argumentos de función de la función de paso.

Sin embargo, dada una tabla de ejemplo más grande con muchas columnas, esto rápidamente se vuelve molesto de escribir y leer:

# feature file
Feature: Large Table Example

  Scenario Outline: Use Blender with a lot of things
    Given I put "<first_thing>", "<second_thing>", "<third_thing>", "<fourth_thing>", "<fifth_thing>", "<sixth_thing>", "<seventh_thing>" in a blender
    When I switch the blender on
    Then it should transform into "<other thing>"

    Examples: Things
        | first thing | second thing | third thing | fourth thing | fifth thing | sixth thing | seventh thing |
        | a     | b             | c  | d           | e            | f           | g           | h             |
        | i     | j             | k  | l           | m            | n           | o           | p             |

# steps file    
@given('I put "{first_thing}", "{second_thing}", "{third_thing}", "{fourth_thing}", "{fifth_thing}", "{sixth_thing}", "{seventh_thing}",  in a blender')
def step_given_put_thing_into_blender(context, first_thing, second_thing, third_thing, fourth_thing, fifth_thing, sixth_thing, seventh_thing):
    context.blender = Blender()
    context.blender.add(thing)
...

Creo que el punto está claro. ¿Existe alguna posibilidad de transferir los ejemplos de una tabla grande a la definición del paso sin tener que mencionarlos explícitamente? ¿Están, por ejemplo, guardados en algún lugar de la variable de contexto, incluso sin mencionarlos en el texto (todavía no los puedo encontrar allí)?

2
Dirk 29 jul. 2016 a las 10:52

1 respuesta

El punto está claro.

Pregúntese por qué realmente necesita todas esas variables.

¿Estás tratando de hacer demasiado en un esquema de escenario? ¿Es posible dividir su problema en dos?

¿Cómo se vería un escenario si solo implementara uno de ellos, es decir, omitiera el esquema? ¿Sería grande y engorroso?

Desafortunadamente, no creo que su problema sea que hay muchos parámetros para mencionar. Su problema es que está tratando de usar demasiados parámetros. Desde donde me siento, parece que estás tratando de hacer demasiado. Lo siento.

0
Thomas Sundberg 29 jul. 2016 a las 17:38