t.me/atinfo_chat Telegram группа по автоматизации тестирования

использование фикстур в behave для python

fixtures
bdd
behave
appium
python
Теги: #<Tag:0x00007fb2ffeac8b0> #<Tag:0x00007fb2ffeac770> #<Tag:0x00007fb2ffeac5b8> #<Tag:0x00007fb2ffeac388> #<Tag:0x00007fb2ffeac248>

(Александр Ткачев) #1

Всем привет.
Никак не могу разобраться с предварительной настройкой приложения перед запуском тестов. Если коротко, то: необходимо протестировать работу приложения предварительно в нем зарегавшись. Нужно чтобы на момент запуска теста, в приложении уже был зареган определенный пользователь и открыт определенный экран. В отдельном тесте я это делаю, но appium каждый тест начинает с нуля, т.е. снова первый вход в приложение и т.д. Повторять уже готовые шаги из теста в тест нет смысла. Кажется для этого можно использовать фикстуры, но вот только я не пойму как это сделать в behave. Кто знает. подскажите пожалуйста, как это можно сделать?


(Ильдар Бекмансуров) #2

https://behave.readthedocs.io/en/latest/fixtures.html

посмотрите тут, вроде даже пример есть


(Александр Ткачев) #3

Да мануал то я видел, но не могу понять как привязать к моему случаю. Что в фикстуре нужно указывать? Последовательность шагов по регистрации пользователя?


(Ильдар Бекмансуров) #4

Вам нужно перед каждым тестом нового пользователя или одного на все?
Все зависит от scope фикстуры. Вот этот раздел почитайте https://behave.readthedocs.io/en/latest/fixtures.html#fixture-cleanup-points

То есть если вам нужен только 1 пользователь, то вы можете перед всеми тестами в before_all() зарегаться и перейти на нужный экран. Но учтите, что после выполнения первого теста второй начнется там, где у вас остановился первый. Если вам нужно переходить на тот нужный экран каждый раз перед каждым тестом, то скорее всего регистрацию пользователя нужно оставить в before_all(), а переход на нужный экран вынести в before_scenario(), чтобы перед каждым тестом открывался нужный экран вне зависимости от того, как завершился предыдущий тест.


(Александр Ткачев) #5

Спасибо за ответ. Сейчас у меня реализовано так: в конце названия features использую “авторизованный” или “неавторизованный”. Дальше в before_feature использую

    if feature.name.count(u"_(неавторизованный)"):  
        caps["noReset"] = "false"
    else:
        caps["noReset"] = "true"

при запуске указываю behave запускать на выполнение набор тестов. Таким образом первым тестом у меня идет авторизация с noReset = True, а дальше уже тесты для авторизованных пользователей с noReset = False. Насколько костыльно это на ваш взгляд?


(Ильдар Бекмансуров) #6

я не умею оценивать костыльность решений, так как опыта маловато)

Вы что-то проверяете в тесте с авторизацией или вы его добавили только для того, чтобы был авторизованный юзер и следующие тесты прошли?


(Александр Ткачев) #7

и то и другое)


(Ильдар Бекмансуров) #8

Ну вот “для того, чтобы был авторизованный юзер и следующие тесты прошли” это не айс мне кажется. Потому что вы не можете взять и запустить к примеру 3-й тест отдельно. Вам всегда нужно чтобы перед этим был запущен первый тест.

Поэтому я и предлагал добавить авторизацию в before_all(), то есть у вас перед запуском всех тестов пройдет авторизация - а потом уже ваши тесты.


(Александр Ткачев) #9

Но тут появилось не описанное мной, доп условие ))). У меня есть также некоторые тесты, которые нужно выполнять на неавторизованном приложении. Поэтому реализовал так, как описал.