Как выжить в мире Python после Java

Праздники прошли - пора браться за ум. Решил поделиться своим опытом автоматизации на Python после долгих лет работы с Java.

Python%2Bvs%2BJava%2B %2BWhich%2BProgramming%2BLanguage%2Bis%2BMore%2BProductive

Началось все просто: меня попросили поревьюить проект, автоматизация на котором писалась на Python. Ну, знаете, как это бывает, - нужно посмотреть не касательно языка, а в общем, так сказать, архитектурно. Я согласился - посмотреть не сложно, да и, может, чего умного узнаю.

Благо, что сам Python я на тот момент пробовал учить, пройдя курс на Coursera и посмотрев курс лекций на Youtube.

Тогда я достаточно быстро разобрался и дал парочку советов, которые принесли проекту пользу. Тот опыт дал мне толчок для более детального погружения в мир Python. Должен отметить, что это случилось еще и потому, что я давно хотел посмотреть на языки вне JVM. Постоянные читатели блога знают, что я работал с Java и фанатею от Groovy. Но еще один козырь в рукаве никогда не будет лишним.

Почему именно Python?

Вокруг него ходит много хайпа, что этот язык достаточно простой и его легко выучить, особенно после Java. Да и при смене работы очень много предложений мне приходило именно на Python.

Ну, и как оно в мире Python?

Когда я все-таки решил, что нужно подразобраться, то прочел книгу - Изучаем Python. Подробный справочник. Еще я начал проходить задания на сайте https://checkio.org/. На уровне "сесть и написать какой-то скриптец" все было достаточно просто.

Но, как обычно, вокруг любого языка существует целая инфраструкрура, состоящая из пакетных менеджеров, IDE и всего того барахла, без которого написать более-менее вменяемый проект нельзя.

Естественно, приходя из Java, ты начинаешь искать похожие инструменты и подходы.

Начнем с IDE. Компания Jetbrains не обошла мир Python стороной и создала PyCharm. Для того, чтобы с IDEA перейти на PyCharm, много времени не нужно. Автодополнение, подсветка и все то, что мы любим в мире Java, там работает.

Дальше интереснее. Управление зависимостями. В мире Java есть Gradle или Maven. В мире Python есть pip. Существует еще easy_install, но я его ни разу не пробовал =).

Так вот этот pip ставит зависимость глобально. Если вы хотите "жить нормально", как в мире Java, вам важно овладеть еще и инструментом virtualenv. Используя virtualenv, нужно для каждого отдельного проекта создавать окружение и уже потом ставить в него все необходимые пакеты. А чтобы сделать проект переносимым, нужно еще в корне проекта создавать requirements.txt и в него заносить все модули, которые необходимы для работы вашего проекта. То есть requirements.txt - это примитивный аналог build.gradle или pom.xml.

Как писать тесты?

Мы же с вами собираемся писать тесты, верно? Чтобы писать тесты, нужен какой-то тест-ранер. В мире Python есть много фреймворков для написания тестов, но, по факту, для меня самым удобным является pytest.

Если брать грубо, то pytest в Python - это TestNG в мире Java.

Овладев всеми этими штуками, мы можем начинать колбасить тесты.

Для написания UI тестов используется тот же Selenium. Да, в мире питона на чистом Selenium тесты выглядят так же ужасно, поэтому нужно писать свои костыли и велосипеды.

Но перед тем, как начать клепать свое, нужно пойти в гугл и поискать альтернативы. Если внимательно искать, можно найти библиотеку Selene. Selene для Python - это полный аналог Selenide для Java. Сейчас Selene активно развивается силами Якова Крамаренко и моими стараниями и активно движется к версии 1.0-stable. Скоро можно будет без опаски брать ее в продакшин и писать красивые и лаконичные тесты.

И последнее. Так как Selenium развивается и выходят все новые и новые драйверы для работы с разными браузерами, этим все делом становится очень сложно управлять. Нужно качать драйверы, постоянно их обновлять. УжОс. В мире Java существует webdriver manager. От недавнего времени в мире Python есть аналог - python webdriver manager.

Что мы имеем в итоге?

Если вы пришли в мир автоматизации на Python после Java, то вместо ваших любимых

Java 8/Gradle/TestNG/Selenide/WebdriverManager

вам нужно овладеть:

Python/pip+virtualenv/pytest/Selene/WebdriverManager

Как вы можете заметить, отличия не значительны, так что дерзайте…​.