Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

py.test-bdd или behave. Что бы вы использовали? Плюсы и минусы

pytest
bdd
gherkin
behave
Теги: #<Tag:0x00007fedb995d360> #<Tag:0x00007fedb995d1a8> #<Tag:0x00007fedb995d068> #<Tag:0x00007fedb995ce88>

(rmerkushin) #21

Хмм ну вот есть плуг для него. http://gauge-python.readthedocs.io/en/latest/


(Mykhailo Poliarush) #22

Ок, да согласен есть неофициальная поддержка, но для больших компаний важно именно официальная поддержка.


(rmerkushin) #23

Ок, бывает, У нас тоже докер не продакшн реди оказался )


(Den Silver) #24

У Behave есть один большой недостаток. Он не позволяет распаралелить тесты! Вернее даже не так. Его дефолтными возможностями он этого не позволяет. Можно привлечь behave-parallel, но это такой КОСТЫЛЬ, что поработав с ним, плюнули, и пришли pytest-bdd. Behave вроде как обещают внедрить таки паралелизацию в релизе 1.3. Что это нам даёт? Написав тесты на pytest-bdd будет уже проделан большой скоуп работ. После того как behave таки внедрят паралелизацию тестов, затраты на переход к Behave будут минимальны, поскольку болшая часть уже будет написана. Надо будет только подправить сами тесты.
Тажке ещё один нюанс. Behave не правильно генерирует json который был бы совместим с Cucumber. То есть, если на дженкинсе установить плагин Cucumber report то, он просто не будет его понимать. Но это лечится через перегон файла посредствами behave2cucumber либы. И того мы имеем 2 путЯ:

  1. Писать сразу на Behave и надеятся что они таки реализуют распаралеливание тестов +нормальную генерацию json репорта соместимого с Cucumber report
  2. Писать на pytest-bdd, запорачиваясь в IDEшках связок степ дефенишенов, и после того как Behave реализуют распаралеливание перейти на него с меньшыми затратами.

Мы выбрали 2й путь.


(Den Silver) #25

В pytest-bdd на сколько я помню небыло возможности шарить между степами контекст

Это реализуется через request. BasePage.request.user_email = значение


(Mykhailo Poliarush) #26

Из коробки до сих пор такого нет, но это легко реализуется с помощью fixture

@pytest.fixture(scope='session')
def context():
    """Context object to store data to be passed between steps"""
    return Context()
@given('test step 1')
def test1(context):
    context.id = 1233

@given('test step 2')
def test1(context):
    print context.id


(Mykhailo Poliarush) #27

В общем, мы тоже выбрали второй вариант, имеет только один большой плюс #behave это поддержка в #pycharm


(Fuji F) #28

Bdd это же не библиотеки, а стиль жизни. Вам ничего не мешает писать Стёпы/логи в стиле bdd в уже существующих тестах

log(“Given …”)
def foo = …

log(“And card is empty …”)
card.isEmpty…

Типа как в груви spock

setup: “open a database connection”
// code goes here

and: “seed the customer table”
// code goes here

and: “seed the product table”
// code goes here


(Den Silver) #29

Также behave обещают выпустить возможность распаралеливания тестов по фичам и сценариям в этом году (2018).


(Mykhailo Poliarush) #30

Ну будем ждать