Перейти к содержимому

Фотография

Существует ли инструмент, позволяющий смешать DDT и BDD?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 RockBomber

RockBomber

    Новый участник

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Кузнецов Владимир

Отправлено 15 декабря 2015 - 14:17

Существует ли инструмент, позволяющий смешать DDT (Data Driven Testing) и BDD (Behaviour Driven Development) ?

Почему возник такой вопрос: имеется сложная система, с некой сущностью,
у которой есть жизненный цикл, на протяжении которого сущность меняет состояние, мигрирует с одного сервера на другой.
Причем есть несколько вариантов развития жизненного цикла, которые отличаются разными последовательностями состояний сущности.

Создание сущности, и перевод ее по жизненному циклу с помощью вызова веб сервисов удобно описываются с помощью тестов BDD (Behaviour Driven Development).
Я использую Python Behave.
Для каждого состояния я описываю свой feature файл, передавая сущность через context.
В каждом feature файле содержатся сценарии и шаги, в которых происходит множество действий (обращения к различным веб сервисам,
Для описания разных вариантов развития жизненного цикла, использую feature list файлы, в которых перечислены последовательности feature файлов.

Но кроме последовательности состояний, требуется тестировать разные экземпляры исходных сущностей с разным набором данных.
Это уже попадает под DDT (Data Driven Testing).
В моем случае планируется хранить исходные экземпляры сущности в БД, получать их можно например через ORM.

Но Python Behave не подразумевает многократного запуска одного и того же feature или feature list с разным набором исходных данных.

Кто знает, существуют ли инструменты под такие задачи?
  • 0

#2 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 15 декабря 2015 - 15:32

Вы уверены, что не можете написать в behave сценарий который вызывает behave c заданными параметрами?


  • 0

#3 RockBomber

RockBomber

    Новый участник

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Кузнецов Владимир

Отправлено 15 декабря 2015 - 16:56

Через параметры запуска тестовые данные особо и не передашь.
Можно запускать, указывая определенные параметризованные теги, исходя из которых feature будет запускаться с определенными параметрами.
Но это не вариант, т.к. в БД исходных сущностей много и их количество может меняться, для каждой создавать свой тег будет не разумно.

Пока вижу вариант, переписать исполняемый файл behave, который будет проходить по списку сущностей, внедрять сущность в контекст и запускать тесты.
Но как-то это костыльно.. Вдруг уже есть инструменты, рассчитанные на такие тесты?
  • 0

#4 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 15 декабря 2015 - 21:10

Передавайте id тестового сета через файл, или сохраняйте в той-же БД. Ваша задача указать тесту какой именно набор тестовых данных брать. Способов миллион.


  • 0

#5 RockBomber

RockBomber

    Новый участник

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Кузнецов Владимир

Отправлено 15 декабря 2015 - 21:28

Понятно, что можно делать различные обертки вокруг инструмента.
Так я и сделал, переписав исполняемый файл так, что он в цикле запускает behave внедряя каждый раз новые тестовые данные в контекст.

Но интересно было узнать существуют ли инструменты, изначально заточенные под подобные задачи.
  • 0

#6 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 16 декабря 2015 - 07:49

Понятно, что можно делать различные обертки вокруг инструмента.
Так я и сделал, переписав исполняемый файл так, что он в цикле запускает behave внедряя каждый раз новые тестовые данные в контекст.

Но интересно было узнать существуют ли инструменты, изначально заточенные под подобные задачи.

А вы себе работу этих инструментов как представляете? Отличную от концепции запуска в цикле с сохранением результата каждого прогона в отдельную папочку и возвратом наверх только статуса прогона или сборкой всех отчетов в один отчет?


  • 0

#7 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 16 декабря 2015 - 07:50

Большинство BDD-инструментов позволяют параметризовать сценарии. Нужно в документации искать по словам "scenario outlines".

В частности, про Python Behave читайте здесь: http://pythonhosted....enario-outlines


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#8 RockBomber

RockBomber

    Новый участник

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Кузнецов Владимир

Отправлено 16 декабря 2015 - 07:58

Большинство BDD-инструментов позволяют параметризовать сценарии. Нужно в документации искать по словам "scenario outlines".
В частности, про Python Behave читайте здесь: http://pythonhosted....enario-outlines


Scenario Outlines рассматривал, он не подходит. Тут скорее надо Feature Outlines или даже All Outlines :)

А вы себе работу этих инструментов как представляете? Отличную от концепции запуска в цикле с сохранением результата каждого прогона в отдельную папочку и возвратом наверх только статуса прогона или сборкой всех отчетов в один отчет?


Сборка всех отчетов в один отчет. Самописная обертка над behave так и будет делать.
  • 0

#9 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 16 декабря 2015 - 08:06

Да, параметризация feature в языке gherkin не предусмотрена. А все существующие BDD-инструменты ориентируются именно на этот язык. Увы.

 

Почему бы не пересмотреть подход к проектированию сценариев, сделать их более высокоуровневыми, то есть фактически превратить в сценарии то, что Вы сейчас считаете фичами?


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#10 RockBomber

RockBomber

    Новый участник

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Кузнецов Владимир

Отправлено 16 декабря 2015 - 08:49

Да, параметризация feature в языке gherkin не предусмотрена. А все существующие BDD-инструменты ориентируются именно на этот язык. Увы.
 
Почему бы не пересмотреть подход к проектированию сценариев, сделать их более высокоуровневыми, то есть фактически превратить в сценарии то, что Вы сейчас считаете фичами?


Получится очень огромный сценарий.
На протяжении жизненного цикла сущности выполняется много шагов, на каждом которых надо выполнять свои проверки.
Объединять несколько шагов в один будет тоже не правильно, т.к. в случае ошибки тяжелее будет найти на каком шаге она произошла,
сценарий потеряет информативность, и мы не будем видеть в отчете какие шаги и проверки выполнялись.

Наоборот, стараемся максимально разбить сценарии, чтобы избежать дублирования сценариев и ошибок в тестах.
На данный момент на каждый переход в иное состояние сущности есть свой feature файл.
В зависимости от порядка состояний сущности, которые мы хотим протестировать, feature файлы перечисляются в разных последовательностях в feature list файлах.
Далее behave запускается с указанием feature list файла, а в глобальный контекст помещается экземпляр сущности.

Это работает. Но не покидает мысль, что возможно существуют иные инструменты, подходящие под такие задачи.
  • 0

#11 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 16 декабря 2015 - 09:39

 

Наоборот, стараемся максимально разбить сценарии, чтобы избежать дублирования сценариев и ошибок в тестах.
На данный момент на каждый переход в иное состояние сущности есть свой feature файл.
В зависимости от порядка состояний сущности, которые мы хотим протестировать, feature файлы перечисляются в разных последовательностях в feature list файлах.
Далее behave запускается с указанием feature list файла, а в глобальный контекст помещается экземпляр сущности.

Это работает. Но не покидает мысль, что возможно существуют иные инструменты, подходящие под такие задачи.

 

Это врят-ли. Задача не частая, каждый у кого она возникает имеет какие-то свои специальные требования, решается задача некоей внешней оберткой.

Например у меня Cucumber запускался через rake. На уровне rake такую задачу решить реально, зачем изобретать какой-то еще велосипед?

Вполне возможно что в питоне тоже есть какой-то свой "make" с го и гейшами, на уровне которого вопрос циклического запуска и агрегации отчетов решается на раз.


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных