Функциональное тестирование с freshen
Некоторое время назад, набрел в сети на пакет cucumber, который помогает создавать различные тесты. Все действия в тесте описываюстя с помощью файла сценария, который пишется на языке Grekhin представляющий из себя обычный, понятный для человека текст на любом языке. К сожалению cucumber это разработка для Ruby, но у него есть практически полная копия переписаная под Python с поддержкой nose и зовется freshen
Теперь, расскажу про создание теста на freshen
Файл сценарий содержит в себе:
- Путь к файлу с шагами теста (steps файл)
- Описание данного теста
- Сценарии
Для привязки шагов в коде с шагами в .feature файле используются декораторы.
Для примера, стандартный .feature файл с описанием сценария выглядит так (пример из документации):
Using step definitions from: 'steps', 'step/page_steps' Feature: Destroy a document In order to take out one's anger on a document As an unsatisfied reader I want to be able to rip off the pages of the document Scenario: Rip off a page Given a document of 5 pages And the page is 3 When I rip off the current page Then the page is 3 But the document has 4 pages
Файл с шагами будет выглядеть примерно так:
@Given('a document of 5 pages') def step1(): pass @Given('the page is 3') def step2(): pass @When('I rip off the current page') def step3(): pass @Then('the page is 3') def step4(): pass @Then('the document has 4 pages') def step5(): pass
Основные ключевые слова при использовании английского языка для написания сценариев:
Given, When, Then, But, And
Также, для описания шага можно использовать регулярные выражения:
@Given('the page is ([\d]+)') def step2(page): pass
Т.к. freshen поддерживает работу с nose, то для его запуска через nose можно использовать такую команду:
nosetests –with-freshen test.feature
После выполнения тестов, если не было неудачно закончившихся шагов, покажет что все хорошо, иначе покажет на каком степе остановился. Также, freshen поддерживает тэги, которые можно повесить на сценарии и запускать только по тэгам.

