Существует ли инструмент, позволяющий смешать DDT и BDD?
#1
Отправлено 15 декабря 2015 - 14:17
Почему возник такой вопрос: имеется сложная система, с некой сущностью,
у которой есть жизненный цикл, на протяжении которого сущность меняет состояние, мигрирует с одного сервера на другой.
Причем есть несколько вариантов развития жизненного цикла, которые отличаются разными последовательностями состояний сущности.
Создание сущности, и перевод ее по жизненному циклу с помощью вызова веб сервисов удобно описываются с помощью тестов BDD (Behaviour Driven Development).
Я использую Python Behave.
Для каждого состояния я описываю свой feature файл, передавая сущность через context.
В каждом feature файле содержатся сценарии и шаги, в которых происходит множество действий (обращения к различным веб сервисам,
Для описания разных вариантов развития жизненного цикла, использую feature list файлы, в которых перечислены последовательности feature файлов.
Но кроме последовательности состояний, требуется тестировать разные экземпляры исходных сущностей с разным набором данных.
Это уже попадает под DDT (Data Driven Testing).
В моем случае планируется хранить исходные экземпляры сущности в БД, получать их можно например через ORM.
Но Python Behave не подразумевает многократного запуска одного и того же feature или feature list с разным набором исходных данных.
Кто знает, существуют ли инструменты под такие задачи?
#2
Отправлено 15 декабря 2015 - 15:32
Вы уверены, что не можете написать в behave сценарий который вызывает behave c заданными параметрами?
#3
Отправлено 15 декабря 2015 - 16:56
Можно запускать, указывая определенные параметризованные теги, исходя из которых feature будет запускаться с определенными параметрами.
Но это не вариант, т.к. в БД исходных сущностей много и их количество может меняться, для каждой создавать свой тег будет не разумно.
Пока вижу вариант, переписать исполняемый файл behave, который будет проходить по списку сущностей, внедрять сущность в контекст и запускать тесты.
Но как-то это костыльно.. Вдруг уже есть инструменты, рассчитанные на такие тесты?
#4
Отправлено 15 декабря 2015 - 21:10
Передавайте id тестового сета через файл, или сохраняйте в той-же БД. Ваша задача указать тесту какой именно набор тестовых данных брать. Способов миллион.
#5
Отправлено 15 декабря 2015 - 21:28
Так я и сделал, переписав исполняемый файл так, что он в цикле запускает behave внедряя каждый раз новые тестовые данные в контекст.
Но интересно было узнать существуют ли инструменты, изначально заточенные под подобные задачи.
#6
Отправлено 16 декабря 2015 - 07:49
Понятно, что можно делать различные обертки вокруг инструмента.
Так я и сделал, переписав исполняемый файл так, что он в цикле запускает behave внедряя каждый раз новые тестовые данные в контекст.
Но интересно было узнать существуют ли инструменты, изначально заточенные под подобные задачи.
А вы себе работу этих инструментов как представляете? Отличную от концепции запуска в цикле с сохранением результата каждого прогона в отдельную папочку и возвратом наверх только статуса прогона или сборкой всех отчетов в один отчет?
#7
Отправлено 16 декабря 2015 - 07:50
Большинство BDD-инструментов позволяют параметризовать сценарии. Нужно в документации искать по словам "scenario outlines".
В частности, про Python Behave читайте здесь: http://pythonhosted....enario-outlines
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#8
Отправлено 16 декабря 2015 - 07:58
Большинство BDD-инструментов позволяют параметризовать сценарии. Нужно в документации искать по словам "scenario outlines".
В частности, про Python Behave читайте здесь: http://pythonhosted....enario-outlines
Scenario Outlines рассматривал, он не подходит. Тут скорее надо Feature Outlines или даже All Outlines :)
А вы себе работу этих инструментов как представляете? Отличную от концепции запуска в цикле с сохранением результата каждого прогона в отдельную папочку и возвратом наверх только статуса прогона или сборкой всех отчетов в один отчет?
Сборка всех отчетов в один отчет. Самописная обертка над behave так и будет делать.
#9
Отправлено 16 декабря 2015 - 08:06
Да, параметризация feature в языке gherkin не предусмотрена. А все существующие BDD-инструменты ориентируются именно на этот язык. Увы.
Почему бы не пересмотреть подход к проектированию сценариев, сделать их более высокоуровневыми, то есть фактически превратить в сценарии то, что Вы сейчас считаете фичами?
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#10
Отправлено 16 декабря 2015 - 08:49
Да, параметризация feature в языке gherkin не предусмотрена. А все существующие BDD-инструменты ориентируются именно на этот язык. Увы.
Почему бы не пересмотреть подход к проектированию сценариев, сделать их более высокоуровневыми, то есть фактически превратить в сценарии то, что Вы сейчас считаете фичами?
Получится очень огромный сценарий.
На протяжении жизненного цикла сущности выполняется много шагов, на каждом которых надо выполнять свои проверки.
Объединять несколько шагов в один будет тоже не правильно, т.к. в случае ошибки тяжелее будет найти на каком шаге она произошла,
сценарий потеряет информативность, и мы не будем видеть в отчете какие шаги и проверки выполнялись.
Наоборот, стараемся максимально разбить сценарии, чтобы избежать дублирования сценариев и ошибок в тестах.
На данный момент на каждый переход в иное состояние сущности есть свой feature файл.
В зависимости от порядка состояний сущности, которые мы хотим протестировать, feature файлы перечисляются в разных последовательностях в feature list файлах.
Далее behave запускается с указанием feature list файла, а в глобальный контекст помещается экземпляр сущности.
Это работает. Но не покидает мысль, что возможно существуют иные инструменты, подходящие под такие задачи.
#11
Отправлено 16 декабря 2015 - 09:39
Наоборот, стараемся максимально разбить сценарии, чтобы избежать дублирования сценариев и ошибок в тестах.
На данный момент на каждый переход в иное состояние сущности есть свой feature файл.
В зависимости от порядка состояний сущности, которые мы хотим протестировать, feature файлы перечисляются в разных последовательностях в feature list файлах.
Далее behave запускается с указанием feature list файла, а в глобальный контекст помещается экземпляр сущности.
Это работает. Но не покидает мысль, что возможно существуют иные инструменты, подходящие под такие задачи.
Это врят-ли. Задача не частая, каждый у кого она возникает имеет какие-то свои специальные требования, решается задача некоей внешней оберткой.
Например у меня Cucumber запускался через rake. На уровне rake такую задачу решить реально, зачем изобретать какой-то еще велосипед?
Вполне возможно что в питоне тоже есть какой-то свой "make" с го и гейшами, на уровне которого вопрос циклического запуска и агрегации отчетов решается на раз.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных