Алексей Коледачкин @manikosto
QA Lead
Information
- Rating
- Does not participate
- Location
- Warszawa, Mazowieckie, Польша
- Date of birth
- Registered
- Activity
Specialization
Test Automation Engineer, Quality Assurance Manager
Lead
Python
Docker
Linux
Git
English
OOP
?
Спасибо за комментарий)
Да нет, все верно говорите, я в статье не стал все scopes перечислять, просто выделил два самых часто используемых))
@Ariki
Насчет return опечатался, исправил спасибо) yield - в статье я функцией не называл)
Так же поправил определение фикстуры)
Спасибо за продуктивную и не негативную критику) На сколько я вижу, некоторые люди негатив считают продуктивной критикой)
Спасибо за ваше мнение ?
В конечном же итоге, можно всю жизнь изучать как устроен автомобиль, но ни разу не сесть за руль) Думаю тут сложно не согласиться
Вот это адекватная, без негативная критика, вызывает уважение!
Я вас понимаю, сам использую терминологию в работе, некоторые моменты в статье поправлю, спасибо!
Если говорить в целом, автоматизатор, даже продвинутый, имеет явно меньше опыта с кодом, и многие термины могут быть не понятны, опять же, QA Automation, после этой статьи пойдет и напишет тест используя фикстуры и принесет пользу компании и постепенно будет углубляться в другие темы, а не пойдет читать про аннотации, про генераторы и прочее, не принеся никакой пользы в итоге
Если вы разработчик и не знакомы с направлением QA, и работали только с unit тестами, то статья не для Вас, она для QA! Но в целом почитайте про PageObjectModel (паттерн для автоматизации тестирования) это сфера QA. Тесты и так атомарные, там нет никаких наследований в коде.
Зачем прописывать каждый раз драйвер?) Вам что крутой автоматизатор, что ChatGPT абсолютно такую же инициализацию драйвера через фикстуру сделает, как меня в примере)
И снова, я убрал все лишнее чтобы сконцентрировать внимание QA Automation инженеров на определенной теме, а не фронтендеров, бекендеров, девопсов, если вы так негативно реагируете на отсутствие аннотаций, напишите лучше статью на эту тему, и задумайтесь сколько лет писали и без нее и никто не умер☺️)
Ну и поверьте, чтобы изучить фикстуры, да и в целом любуууууую тему, по умолчанию знать аннотоцаии не является ни блокирующим, ни обязательным условием!
Если человек не знает аннотаций, это не значит что он не имеет право учить что-то без них)
Но еще раз скажу спасибо, любое мнение имеет место быть?
Ну и в названии статьи напомню «На человеческом», не на прогерском, математическом или еще каком-то языке)
Очень сильно не хватает такого рода обьяснений!
Ну и поверьте, если люди дошли до темы фикстур, они явно не идиоты, уж смогут обработать информацию и сформулировать для себя поинт
Если Вы не поймете, сотня других автоматизаторов поймет)
Отрицание, верный признак негативного восприятия всего и вся)
Поверьте, этого более чем достаточно чтобы ответить на все вопросы, человек идет на автоматизатора, а не разработчика бекенда!
Я проходил очень много собеседований, получал офферы в очень хорошие компании, как и вы скорее всего (в хорошем смысле) и меня более чем отлично понимали!
Судя по тому что Вы разработчик, говорить нам особо дальше не о чем, предположу, что вероятно специфику собеседований и знаний для автоматизатора вы не совсем знаете.
У вас свой опыт, у меня свой, и косвенно утверждать что ваш опыт это эталон такое себе.
В статье как раз и говориться о рулевом колесе, жаргонов там вы не найдете)
В целом, спасибо за внимание к статье и за дискуссию)
Я не могу сказать что Вы не правы, отчасти правы, но скажу однозначно, обьяснить на пальцах без заумных фраз чаще на много полезнее и эффективнее, чем грузить терминологией, которая может оттолкнуть человека.
Уметь программировать и учить, доносить информацию так чтобы ей могли пользоваться, это разные вещи)
Ну и важно помнить, нет единого пути, собственно в статье я представил свой, и уверен, он точно кому-то поможет)
Про классы пардон, не ваш вопрос, моя вина, ошибки признавать умею) Я понял о чем вы, только вот в чем суть, после прочтения моей статьи автоматизатор, особенно юнный, сможет легко зайти и использовать фикстуры на полную, даже не парясь о том, что такое генераторы. В рамках тестирования и написания фикстур, вот вообще все равно генератор это или нет. Для тестирования это разделитель пред и постусловия.
Пример: Как вы поступите с ребенком, когда он Вас спросит, как ездит машинка?
Наверное Вы ребенку скажете, что вот баранка, если ее крутить, то машинка поворачивает, если жать на педальку она едет.
В данной ситуации, ребенку важна и полезна только эта информация, а не та, где вы начнете говорить, что машина поворачивает, потому что передается крутящий момент на оси колес или машина едет потому что в ДВС работают поршни, туда впрыскивается бензин, и посредством его сгорания и т.д...
Да и в реальной жизни, вот мне пофигу как машина едет, мне достаточно верхнеуровневых знаний, и поверьте, если вы о машине знаете все глубже, от этого я или другой человек водить хуже чем вы не будет)
С образовательной точки зрения, я считаю моя статься несет море полезной информации.
В целом, спасибо за комментарий, статься написана как раз для людей, а не мат батанов и программеров с 100к + лет стажем)
Я бы мог ответить, что судя по вопросу "зачем тесты обьединять в класс" все понятно, но к сожалению не вижу смысла обьяснять что-либо негативно настроенным людям, значит статься поможет кому-то другому)
Кратко поясню, есть контекст, в рамках фикстур yield выполняет функцию пред- и постусловия, и да, я читал официальную доку)
Вот ответ для Вас из нее, если владеете английским вероятно поймете:
“Yield” fixtures
yield
instead ofreturn
. With these fixtures, we can run some code and pass an object back to the requesting fixture/test, just like with the other fixtures. The only differences are:return
is swapped out foryield
.Any teardown code for that fixture is placed after the
yield
.Once pytest figures out a linear order for the fixtures, it will run each one up until it returns or yields, and then move on to the next fixture in the list to do the same thing.
Once the test is finished, pytest will go back down the list of fixtures, but in the reverse order, taking each one that yielded, and running the code inside it that was after the
yield
statement.Тут я имел ввиду саму возможность параллельного запуска) Если у вас не атомарные тесты, и создается лишь 1 экземпляр драйвера на класс, то параллельно вы их не запустите, будет оооооочень много проблем)
Но за комментарий спасибо! сделал уточнение в статье)
Рекомендую ознакомиться в целом с pytest и PageObjectModel паттерном.
Тут в оф документации https://docs.pytest.org/en/latest/how-to/fixtures.html можете найти информацию и про тестовые классы и про yield)
Ну это не секрет) Если говорить глубже, то да маркер = декоратор, по сути этот маркер декоратор превращающий в декоратор принимающую функцию) И yield в контексте pytest никак не связан с генераторами) Не путайте со стандартным yield из Python
Из статьи:
Для того, чтобы функцию зарегистрировать как фикстуру, в pytest есть специальный маркер @pytest.fixture, который нужно прописать над нужной функцией.
Тесты) Говорю про это когда обьясняю yield))
Обьясняет, да, только так, что любой новичок впадет в шок)
Вопрос 1 - Тесты обьединяются в тестовый класс (это тестовый сьют для pytest) + как сказано в начале статьи, используется паттерн PageObject
Вопрос 2 - Как написано в статье, магия с request это один из вариантов использования, о котором необходимо знать, к примеру для того, чтобы не прокидывать драйвер во все тесты в качестве аргумента
Вопрос 3 - Касательно к примера с тестовыми данными, да, несомненно проще прокидывать фикстуру в качестве аргумента в тест
Вопрос 4 - Про аннотации типов согласен, но их даже многие крутые разрабы не используют, а для новичков это лишние сбивающие с толку каракули в коде, а моя задача ясно изложить суть фикстур)
Спасибо большое за комментарий)