Одной из очень спорных и обсуждаемых тем в автоматизации тестирования является выбор языка программирования. Особенно, когда речь идет о связке с самым популярным инструментом автоматизации – Selenium WebDriver, ведь он имеет официальную поддержку пяти языков: Java, C#, Python, JavaScript и Ruby. В дополнении к этому существует большое количество реализаций на других языках. Так что же нам лучше выбрать?
Опытный автоматизатор, хоть раз программирующий с использованием более чем одного языка, без сомнения скажет, что важна задача, а не инструмент. В этом и состоит большая разница, когда мы говорим “программированием на языке” или “программируем с использование языка.” При программировании с использование языка мы отталкиваемся от цели, для которой мы выбрали какой-либо язык программирования. Приведу пример: мы не хотим программировать на языке Swift, а хотим разрабатывать IOS приложения (это цель) и тогда, конечно же, мы должны освоить Swift, а не Java. Когда же мы говорим про автоматизацию тестирования, нашей целью может быть уменьшение времени ручного регресса за счет написания автотестов. Оно включает разработку многоуровневого фреймворка, подключение сторонних библиотек, оберток для интеграции вспомогательных инструментов, написание PageObjects для декомпозиции и инкапсуляции работы с элементами страницы / экрана приложения. Как видите, эти задачи не привязаны к платформе, технологии и какому-либо языку программирования. Именно поэтому в большинстве случаев в работе тестировщика-автоматизатора язык программирования является вспомогательным фактором.
Несмотря на рассуждения в предыдущем абзаце о важности выбора языка программирования для автоматизации, при его использовании все же встречаются свои нюансы, более или менее удобные подходы для реализации одних и тех же задач. Никто не будет спорить (и я тоже), что самым популярным языков для автоматизации тестирования является Java. Об этом говорит большое количество вакансий, обсуждений, замечательных выпускаемых оберток (например, Selenide). Но так уж сложилось, что последние 6 лет я работаю в компаниях, где основным языком разработки выступает JavaScript. Соответственно и для автоматизации тестирования был выбран именно он. Ниже хотел бы выделить некоторые моменты, которые считаю преимуществом использования данного языка. При этом я не буду его сравнивать с другими, но, возможно, эти плюсы помогут вам определиться с выбором первого языка программирования для изучения автоматизации.
1. Нестрогая типизация
Начну с самого провокационного плюса, потому что для сторонников строгой типизации это огромный минус. Опять же нужно отталкиваться от задач. Всегда ли нам для автоматизации нужен "кровавый энтерпрайз” – многоуровневый объектно-ориентированный фреймворк. Мой опыт говорит, что нет. Обычно этим увлекаются Senior Automation QAs, желающие потренироваться на работе в добавлении новых паттернов проектирования, что приводит к высокому порогу вхождения для начинающих специалистов. Конечно, вместо типов нельзя просто писать var / let / const, не задумываясь, как там внутри что преобразуется. Придется потратить время на изучение и набить руку, после чего скорость кодирования увеличится в разы.
2. JSON
Что такое JSON ? JSON – JavaScript Object Notation. И этим все сказано. Если хотите считывать данные в формате JSON в JavaScript объект, нужно написать всего одну строчку.
const someObject = require('./somefile.json')
Для этого не нужны никакие сторонние библиотеки, а с учетом нестрогой типизации вы также можете в одну строчку получать ответы от сервера и проверять полученный результат без создания каких-либо вспомогательных классов и объектов.
3. ES6 синтаксический сахар
Язык JavaScript очень активно развивается, чтобы подстроиться и быть удобным для всех. С приходом ES6 в JavaScript добавили такие привычные конструкции из ООП как Class / Extends. Но не спешите радоваться, суть языка от этого не поменялась. Это все еще не ООП, а прототипно-ориентированный язык. Ну и что? Синтаксический сахар на то и сахар, чтобы код выглядел привычно и красиво. Почему бы этим не воспользоваться? Так в нашей компании мы организовали очень плавный и безболезненный onboarding для людей, приходивших со знаниями C# и Java. Мы как бы притворились, что это ООП, используя его философию, а в дальнейшем коллеги изучили нюансы, прелести и недостатки нестрогой типизации.
4. Много современных фреймворков
Современная автоматизация не ограничивается одним лишь Selenium WebDriver. На рынке появляется больше количество классных инструментов, такие как Cypress, Puppeteer, Playwright, WebdriverIO, TestCafe. Какие-то из них более популярные, какие-то менее, но все они подразумевают написание автотестов с использованием JavaScript. Зная этот язык, вам будет проще найти работу и адаптироваться в компаниях, где используют эти инструменты.
5. Популярность самого языка
В первую очередь, JavaScript это язык для разработки Web сайтов, но он стал настолько популярным, что используется везде. Помимо популярных Web фреймворков как React / Angular, можно разрабатывать IOS/Android приложения с помощью React Native или писать микросервисы на платформе NodeJS (серверный JavaScript). Таким образом, с помощью JavaScript возможно разработать свой Frontend / Backend / IOS client, Android client и покрыть это все автотестами, находясь в одной экосистеме.
Это были мои 5 пунктов, почему вам стоит выбрать JavaScript для автоматизации тестирования. Кто-то со мной точно не согласится, поэтому пишите ваше конструктивное мнение в комментариях. Будет интересно почитать. А если вы только находитесь в начале пути автоматизатора, рекомендую посмотреть на курс Otus JavaScript QA Engineer , где вы изучите основы языка, необходимые для автоматизации и пройдете полный путь по разработке API / UI тестов и встраивание их в инфраструктуру проекта.
В качестве заключения приглашаю всех на бесплатный демоурок, в рамках которого разберём основы тестирования API и реализуем тестирование API с помощью mocha и chai.