Для чего тестировщику JavaScript?

JavaScript в сознании большинства закрепился как язык, применяемый в основном для программирования логики пользовательского интерфейса на стороне клиента (веб браузера). Такое применение было заложено в нем изначально, и, в 1995 году, благодаря компании Netscape, идея (которая к тому времени уже томилась под разными соусами пару лет) получила практическую огранку. Впоследствии другие разработчики веб браузеров (после попыток придумать что-то своё) также добавили в свои продукты поддержку языка JavaScript, который к сегодняшнему дню стал, де-факто, обязательным атрибутом современного веб-приложения.

JavaScript используется только в браузерах?

Нет, не только. JavaScript - это встраеваемый скриптовый язык. Он используется там где необходима поддержка гибких, но простых сценариев, которые могли бы управлять объектами среды. Поддержка JavaScript есть в таких продуктах как LibreOffice, MS Office, графических пакетах Adobe, графической оболочке Linux GNOME, платформе серверной разработки Node.js и многих других местах. JavaScript используется даже для программирования некоторых контроллеров (некоторые поставщики программного обеспечения для управления лифтами используют JavaScript в своих устройствах).

Хорошо, я - тестировщик. Зачем мне знать JavaScript?

QA инженеры чаще всего сталкиваются с JavaScript при тестировании веб-приложений. Понимание принципов работы языка, умение читать код, писать простейшие вещи и отлаживать их может помочь:

  • Понять принципы и технологию, которая лежит в основе динамического пользовательского интерфейса. Динамический интерфейс (интерфейс, меняющийся в зависимости от условий) может строится как с использованием только стилей (но его "динамичность" при этом будет сильно ограничена), так и с использованием JavaScript. Такой код на стороне клиента оценивает условия, в которых интерфейс в данный момент находится и при их изменениях, перестраивает раскладку. Например, при помощи джаваскрипта можно оценить размеры видимой области экрана, переназначить имеющиеся стили или присвоить новые стили элементам (скрыть, показать, сделать недоступным поле, изменит размеры или положение элемента и т.д.).

  • Понять принципы и технологию, которая лежит в основе "асинхронного" пользовательского интерфейса. Работая асинхронно, разные части страницы могут обновляться независимо друг от друга. Происходит это за счёт того, что JavaScript-код (по определённому событию) открывает новое соединение к серверу, выступая клиентом внутри клиента. Это позволяет обновлять части страницы (например виджеты), не обновляя всю страницу.

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

  • Использовать продвинутые техники автоматизации. Некоторые виды взаимодействия пользователя с веб-страницей не возможно сэмулировать используя только баиндинг для выбранного языка программирования (например, скроллинг страницы, создание элементов внутри страницы во время теста, анализ DOM-модели, и т.д.). Disclaimer: продвинутые техники автоматизации следует использовать с осторожностью и всегда иметь ясное представление того что вы делаете. В противном случае, существует вероятность не заметить присутствующие дефекты.

  • Тестировать уязвимости. Ряд известных уязвимостей, свойственных веб-приложениям, базируются на особенности исполнения JavaScript-кода в пользовательском браузере. Например, уязвимость, называемая Cross-site Scripting (или XSS) по оценке проекта OWASP в 2017 году обнаруживалась в трети всех протестированных приложений.

  • Расширить вариативность используемых фреймворков автоматизации. У Selenium существует ряд альтернатив (и количество таких альтернатив с каждым годом растет). Некоторые альтернативы, такие как, например, Cypress используют JavaScript для описания автоматизированных тестов.

Данный список не является исчерпывающим. Существует бесконечное количество ситуаций, в которых инженер, знающий JavaScript сможет облегчить себе жизнь и упростить рабочие задачи как в ручном, так и в автоматизированном тестировании. Если у вас остались вопросы, пожелания или предложения, задавайте их тут. Я постараюсь дополнить статью опираясь на ваши замечания.