Выполнение определенных шагов один раз перед наброском сценария - Python Behave

Как следует из названия, я хочу выполнить некоторые шаги по настройке конфигурации / среды перед схемой сценария. Я знаю, что для сценариев это можно сделать Background, но Behave разбивает схему сценария на несколько сценариев и, таким образом, запускает фон для каждого ввода в схеме сценария.

Это не то, что я хочу. По определенным причинам я не могу предоставить код, с которым работаю, однако напишу пример файла функции.

Background: Power up module and connect
Given the module is powered up
And I have a valid USB connection

Scenario Outline: Example
    When I read the arduino
    Then I get some <'output'>

Example: Outputs
| 'output' |
| Hi       |
| No       |
| Yes      |

В этом случае будет происходить следующее: Behave выключит и проверит USB-соединение для каждого выхода Hi, No, Yes, что приведет к трем циклам включения питания и трем проверкам соединения.

Я хочу, чтобы Behave один раз выключил и проверил соединение, а затем запустил все три теста.

Как бы я это сделал?


person Nightsreach    schedule 07.12.2015    source источник


Ответы (3)


Лучше всего, вероятно, использовать ловушку среды before_feature и либо а) теги функции, и / или б) имя функции напрямую.

Например:

some.feature

@expensive_setup
Feature: some name
  description
  further description

  Background: some requirement of this test
    Given some setup condition that runs before each scenario
      And some other setup action

  Scenario: some scenario
      Given some condition
       When some action is taken
       Then some result is expected.

  Scenario: some other scenario
      Given some other condition
       When some action is taken
       Then some other result is expected.

steps / enviroment.py

def before_feature(context, feature):
    if 'expensive_setup' in feature.tags:
        context.excute_steps('''
            Given some setup condition that only runs once per feature
              And some other run once setup action
        ''')

альтернативные шаги / enviroment.py

def before_feature(context, feature):
    if feature.name == 'some name':
        context.excute_steps('''
            Given some setup condition that only runs once per feature
              And some other run once setup action
        ''')
person TomDotTom    schedule 02.12.2016

У меня точно такая же проблема. Существует дорогое Background, которое следует выполнять только один раз за Feature. Что на самом деле необходимо для решения этой проблемы, так это возможность сохранять состояние между Scenarios.

Мое решение этой проблемы заключалось в использовании behave.runner.Context#_root, которое сохраняется на протяжении всего прогона. Я знаю, что доступ к закрытым членам - не лучшая практика - я буду очень рад узнать более чистый способ.

# XXX.feature file
Background: Expensive setup
  Given we have performed our expensive setup

# steps/XXX.py file
@given("we have performed our expensive setup")
def step_impl(context: Context):    
    if not context._root.get('initialized', False):
        # expensive_operaion.do()
        context._root['initialized'] = True
person botchniaque    schedule 18.01.2016
comment
Я считаю, что ответ TomDotDom - это правильный подход. Вы можете сделать это таким образом, но это то, для чего предназначен steps/enviroment.py, и по сравнению с этим этот способ кажется немного взломанным. - person JGC; 10.08.2017

Ты можешь сделать это :

  1. Создайте environment.py в папке Features

  2. Внутри environment.py: из устройства импорта поведения

  3. Написать код:

из приспособления для импорта

def before_feature (контекст, функция): print (запускается перед каждой функцией)

def after_feature (контекст, функция): print (Запускать после каждой функции)

def before_scenario (контекст, сценарий): print (запускать перед каждым сценарием)

def after_scenario (контекст, сценарий): print (Запускать после каждого сценария)

# Теперь запустите свой Tc: ваш O / P будет запускаться перед каждым запуском функции перед запуском каждого сценария после запуска каждого сценария после каждой функции

person surbhi khare    schedule 20.07.2020