Как выжить в мире Python после Java
Праздники прошли - пора браться за ум. Решил поделиться своим опытом автоматизации на Python после долгих лет работы с Java.
Началось все просто: меня попросили поревьюить проект, автоматизация на котором писалась на 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
Как вы можете заметить, отличия не значительны, так что дерзайте….