Почему мы преподаем Automation на Python, а не на Java

May 3, 2020

Автор: Светлана Левинсон, 7 лет опыта во всех видах автоматизированного и ручного тестирования на Python, Java и Ruby в Кремниевой долине. Соавтор и преподаватель курсов Manual/API Testing и Test Automation with Python.

Мы в школе QA JobEasy.co часто слышим споры по поводу того, какой язык программирования стоит изучать, чтобы скорее выйти на работу в Test Automation — Java или Python? Это давний спор, в котором вряд ли будет поставлена точка в ближайшем будущем. Наши преподаватели отлично владеют как Java, так и Python, поэтому мы могли бы преподавать оба этих языка, но мы сделали выбор в сторону обучения Python для наших студентов и решили вообще не преподавать Java. Читайте далее, чтобы понять почему.

Сразу хотим отметить для любителей Java, что в нашем анализе критерии оценки определялись главной целью курса:

Очень качественно дать необходимый минимум по автоматизации, чтобы студенты могли выходить на зарплату от 115 000 $ в год в течение 2–4 месяцев с начала курса обучения.

#1 Простота изучения

Для того, чтобы научить хорошо автоматизировать веб тестирование, нужно объяснить лексику языка программирования, работу с Selenium, научить читать HTML и CSS для нахождения локаторов, показать Git, основы CI и генерации репортов.

Это много и сложно для людей, которые зачастую не имеют никакого опыта программирования. При этом, мы не хотим, чтобы человек заучивал определения, зубрил конструкции и решения к алгоритмам на интервью. Мы хотим, чтобы студенты поняли именно то, что они делают.

Поэтому один из ключевых критериев в выборе языка — это простота изучения. Python новичку проще и быстрее выучить как первый язык программирования, а главное — понять, а не просто вызубрить какие-то конструкции. Просто погуглите “easiest programming language to learn” и сами увидите, что верхнюю строчку занимает именно Python. Например, в этом опросе почти тысячи программистов, HTML занял первое место, Python — второе, а третье со значительным отставанием от Python досталось JavaScript.

В статье авторитетного блога Automation Panda говорится, что для автоматизации тестирования Python подходит лучше — все проще, понятнее, легче поддерживать, куча библиотек с уже готовыми решениями, а Pytest Framework вообще божественен и осваивается быстро.

Pytest — один из лучших фреймворков для тестирования среди всех возможных фреймворков на всех языках программирования. Он справляется с любыми функциональными тестами: unit, integration и end-to-end. Тест-кейсы пишутся просто как функции (то есть без побочных эффектов, так как глобальные переменные исключаются) и могут принимать параметризованные входы.

Fixtures — универсальный, многократно используемый способ настройки и очистки. Основные “assert” операторы имеют автоматическую систему самоанализа, так что сообщения об ошибках понятны. В ходе выполнения, тесты могут быть отсортированы. Плагины расширяют возможности Pytest к покрытию кода, параллельному выполнению тестов, использованию сценариев Gherkin и интеграции с другими фреймворками, такими как Django и Flask. Другие Python тест фреймворки тоже круты, но Pytest, безусловно, лучший.

#2 Прикладное значение

Хоть Python и отлично подходит новичкам, но это не игрушка, это один из наиболее популярных языков программирования во всем мире. Он постоянно находится в топе TIOBE, Stack Overflow и GitHub (также GitHut), так как это любимый выбор очень многих специалистов. Сообщество Python-а также продвигает его вперед.

Разработку на Python легко масштабировать благодаря продуманному синтаксису, хорошей структуре, модульности и богатой экосистеме инструментов и пакетов. Разнообразие методов работы с командной строкой позволяет вписаться в любой инструмент или рабочий процесс. Тот факт, что код написанный на Python может выполняться медленнее кода на некоторых других языках, не является проблемой для функциональных тестов, так как системные задержки (время ответа для Web-страницы или REST вызовы) на порядок медленнее чем оптимальная производительность на уровне языка.

#3 Количество вакансий

Следующий ключевой момент — это востребованность специалиста на рынке, количество вакансий. По данным Indeed.com (все цифры приведены на момент написания статьи):

Смотрим на другом популярном сайте поиска работы: Dice.com: 

На первый взгляд, вакансий Java немногим больше, но если в поиске задать критерии Python AND Automation и Java AND Automation, то получаем:

#4 Конкуренция на вакансию

Важно понимать не только количество вакансий, но и количество потенциальных соискателей-конкурентов на место. По Java и Python мы наблюдаем примерно одинаковое количество вакансий, однако, на позиции в Automation с Java обычно больше соискателей!

Ниже приведено количество выложенных соискателями резюме на один из самых популярных сайтов поиска работы Indeed.com (за последние 3 месяца, цифры приведены на момент написания статьи):

На рынке сотни соискателей, например, из солнечной Индии, которые все, как один, знают Java, ну, или так говорят. На наш взгляд, на Python проще найти работу и выйти на хорошие деньги, так как количество вакансий примерно одинаково и на Python, и на Java, но меньше конкурентов.

#5 Понимание кода

Есть мнение, что надо не только тесты автоматизировать, но и девелоперский код понимать. Разве? Код может быть вообще ни на Java, ни на Python. Представьте ситуацию, вы потратили лишний год и выучили Java, чтобы “девелоперский код понимать”, начали работать, а в компании back-end написан на Scala, а front-end на JavaScript/React. Да и большинство вещей не поймёшь, зная только язык — надо знать фреймворки. Тестировщик в 99 % случаев не должен ни проверять, ни даже видеть код девелоперов.

Такие тесты как integration, end-to-end, system, acceptance, regression, performance обычно относятся к высокоуровневым функциональным тестам и зачастую подходят с позиции black box, поэтому не должны быть обязательно написаны тем же языком, что и сам тестируемый продукт.

#6 Из Test Automation в Software Development

Некоторые говорят, что если выучишь Java, то потом легче выйти на программиста. Но Java для QA и для разработки — это два разных уровня языка со своими особенностями. Это так же применимо и к Python: на входе он прост и понятен, трудности могут возникнуть лишь при погружении дальше, однако язык хорошо структурирован. В первую очередь, надо понимать алгоритмы, ООП и практиковаться. После того, как вы освоите Python и устроитесь на работу, можете изучать Java или что-то другое, что будет вам интересно или необходимо для определенного проекта. Зарплаты в Test Automation и Software Development, в среднем, примерно одинаковые — поэтому для большинства читателей, возможно, вообще данный пункт будет нерелевантен.

Тем не менее, с точки зрения анализа языков программирования по разным критериям, обратите внимание на эту матрицу и описание к ней из блога Automation Panda:

Вывод

Мы считаем, что Python — лучший язык для автоматизации тестирования (Test Automation) по критериям, приведенным выше.

Java — тоже неплохой выбор, и доводы в пользу Java также имеют право на существование, здесь нельзя поставить точку в споре между поклонниками Python и Java. Однако, как преподаватели, мы однозначно советуем новичкам изучать автоматизацию на Python, так как этот путь имеет больше шансов на успех для большинства, особенно в силу простоты освоения Python.

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

Наша цель как школы, обучающей автоматизации — скорейший выход человека на зарплату более 115 000 $ в год и максимизация шансов выхода на работу в течение 2–4 месяцев с начала курса обучения.