Size: a a a

testing_in_python

2020 April 03

СС

Сказочный Сникерс in testing_in_python
если ошибаюсь - поправьте меня
источник

СС

Сказочный Сникерс in testing_in_python
естсь конечно pytest-lazy-fixture но я не рекомендую им пользоваться, там понаверчено выше крыши
источник

KM

Konstantin Mikhed in testing_in_python
@sniiick понял, спасибо большое за ответы.
Буду копать в сторону pytest_generate_tests
источник
2020 April 04

A

Amidoshka in testing_in_python
Добрый день, решил попробовать себя в автотестировании.
В связи с чем есть вопросы, если кто поможет буду рад, я сам новичок в этом деле.
Есть сайт, на нем есть форма входа и несколько пользователей, есть какие-то способы вынести форму входа в отдельный модуль чтобы поменять тестовые данные для входа в этом моуле и  тесты продолжали работать, ибо в каждом из 5 тестов менять каждый раз в них форму входа геморно, спасибо?
источник

S

Siarhei in testing_in_python
Если я правильно тебя понял, то тебе поможет PO. Вот статья, почитай - https://habr.com/ru/post/472156/
источник

A

Amidoshka in testing_in_python
спасибо
источник
2020 April 07

GG

Gregory Gruzdov in testing_in_python
По опыту, если планируется много UI тестов (большой продукт) лучше добавить промежуточный уровень абстракции между тестами и PO, назовем его Actions. Итого:
WebDriver (предоставляется браузером для взаимодействия с сайтом)
Selenium ( юзает WebDriver)

BasePage + PageObject слой - простые действия с элементами сайта, для каждой страницы свой

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

Tests - использует Actions слой

Кстати, BasePage можно для всех PageObject можно сделать один, просто храня ссылку сайта  внутри PageObject класса


Выглядеть функция login Actions слоя будет примерно так

def login(login_name, password):
   login = SomeLoginPage() - в класс PO может быть встроено открытие страницы прямо в инит с флажком отключения, если не надо
   login.enter_login(login_name)
   login.enter_password(password)
   login.click_login()

Обратите внимание, что в этом случае PO слой содержит атомарные операции, пихать в методе проверки не стоит.
источник

FB

Foo Bar in testing_in_python
Gregory Gruzdov
По опыту, если планируется много UI тестов (большой продукт) лучше добавить промежуточный уровень абстракции между тестами и PO, назовем его Actions. Итого:
WebDriver (предоставляется браузером для взаимодействия с сайтом)
Selenium ( юзает WebDriver)

BasePage + PageObject слой - простые действия с элементами сайта, для каждой страницы свой

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

Tests - использует Actions слой

Кстати, BasePage можно для всех PageObject можно сделать один, просто храня ссылку сайта  внутри PageObject класса


Выглядеть функция login Actions слоя будет примерно так

def login(login_name, password):
   login = SomeLoginPage() - в класс PO может быть встроено открытие страницы прямо в инит с флажком отключения, если не надо
   login.enter_login(login_name)
   login.enter_password(password)
   login.click_login()

Обратите внимание, что в этом случае PO слой содержит атомарные операции, пихать в методе проверки не стоит.
Actions зачем нужен?
источник

GG

Gregory Gruzdov in testing_in_python
для реиспользования высокоуровневых действий вместо низкоуровневых
Объектный слой ведь описывает объекты сайта,   не действия пользователя, которые могут содержать большое количество действий с объектами сайта.
Этим уровнем абстракции должен обрастать любой достаточно большой набор тестов - рано или поздно заставляет рефакторинг

Резюмируя, это все нужно,  когда:
-продукт сложный
-тестов много
источник

FB

Foo Bar in testing_in_python
Не понятно, почему actions надо отделять от PO в твоей схеме
источник

FB

Foo Bar in testing_in_python
Это выглядит как нарушение инкапсуляции просто)
источник

GG

Gregory Gruzdov in testing_in_python
С этим слоем у нас работает фреймворк с доброй сотней тысяч тестов. Если соблюдать вышеперечисленные правила - это работает, как часы, и очень упрощает жизнь. Ни к чему не призываю. Можете воспользоваться, а можете жить, как жили. Надеюсь, кому-то поможет.
источник

FB

Foo Bar in testing_in_python
Да, я не нападаю, пытаюсь понять в чем профит от actions
источник

GG

Gregory Gruzdov in testing_in_python
На примере простого маркетплейса:
Test1:
login
buy product
check product is bought

Из этих модулей собирается очень много тестов. Опять же, если продукт сложный - у вас нет шансов этого избежать, иначе тест, типа описанного на хабре
   yandex_main_page = SearchHelper(browser)
   yandex_main_page.go_to_site()
   yandex_main_page.enter_word("Hello")
   yandex_main_page.click_on_the_search_button()
   elements = yandex_main_page.check_navigation_bar()
   assert "Картинки" and "Видео" in elements

будет выглядеть в 100 раз длиннее, и его совершенно непонятно будет, как рефакторить сходу.
источник

GG

Gregory Gruzdov in testing_in_python
Если пихать разные уровни абстракций в один слой, то, как минимум, нарушается читаемость. Поэтому их выносят, хотя бы в разные классы, обычно в модули. Так он и получается, этот слой.
источник

GG

Gregory Gruzdov in testing_in_python
Главная задача слоя: уменьшить повторение кода, в идеале, убрать его - цель оптимизации рефакторинга
Вторичная -улучшить читаемость, так как все действия описаны человеческим языком
источник

GG

Gregory Gruzdov in testing_in_python
Туда же, ко второму - код самодокументируемый, комментарии практически не нужны.
источник

NV

Nikita Vandyshev in testing_in_python
Gregory Gruzdov
Главная задача слоя: уменьшить повторение кода, в идеале, убрать его - цель оптимизации рефакторинга
Вторичная -улучшить читаемость, так как все действия описаны человеческим языком
А есть примеры? Может быть на гитхабе репо?
источник

Z

Zloikurt in testing_in_python
Ребята пишу в файл test_one.py
def test_passing():
   assert (1, 2, 3) == (1, 2, 3)

а мне пайтест говорит что нет нихрена тестов.
я в ступоре) первое знакомство, все по книжке
источник

ИС

Игорь Середа in testing_in_python
Zloikurt
Ребята пишу в файл test_one.py
def test_passing():
   assert (1, 2, 3) == (1, 2, 3)

а мне пайтест говорит что нет нихрена тестов.
я в ступоре) первое знакомство, все по книжке
Где файл лежит? Как pytest запускаешь?
источник