Блог gigimon'а

Функциональное тестирование с freshen

Некоторое время назад, набрел в сети на пакет cucumber, который помогает создавать различные тесты. Все действия в тесте описываюстя с помощью файла  сценария, который пишется на языке Grekhin представляющий из себя обычный, понятный для человека текст на любом языке. К сожалению cucumber это разработка для Ruby, но у него есть практически полная копия переписаная под Python с поддержкой nose и  зовется freshen

Теперь, расскажу про создание теста на freshen

Файл сценарий содержит в себе:

  1. Путь к файлу с шагами теста (steps файл)
  2. Описание данного теста
  3. Сценарии

Для привязки шагов в коде с шагами в .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 поддерживает тэги, которые можно повесить на сценарии и запускать только по тэгам.

2008 — 2018