Как тестировщики, мы должны заботиться о том, чтобы программное обеспечение работало быстро и эффективно. Мы создаем сценарии и проверяем, все ли работает так, как ожидается, и сообщаем о проблемах, если не работает.
Существуют способы предотвратить некоторые проблемы с кодом еще до запуска автотестов.
Что такое линтер
Линтер, по большому счету, это нечто вроде персонального грамматического контролера кода. Он сканирует код на предмет синтаксических ошибок, нарушений кодового стиля и потенциальных багов еще до того, как вы нажмете кнопку «Выполнить». Другими словами, он действует как система раннего предупреждения, давая вам знать, если ваш код неаккуратен или нарушает некоторые правила и лучшие практики. Хотя линтеры обычно используются разработчиками, они могут быть полезны и для тестировщиков-автоматизаторов. В конце концов, последнее, что вы хотели бы увидеть в своем автотесте — это простая глупая ошибка в коде, которой можно было бы избежать.
О пользе подробнее
1. Вылавливает ошибки на ранних этапах
Линтеры отлично справляются с поиском таких распространенных ошибок, как синтаксические ошибки, неиспользуемые переменные и неправильно написанные имена функций и методов. Эти мелкие проблемы могут проскочить во время тестирования, вызывая сбои. Используя линтер, вы можете отловить эти ошибки до запуска теста.
Представьте, что вы пишете автотест в Selenium и забыли точку с запятой. Когда вы пытаетесь выполнить тест, он падает, и вы остаетесь в недоумении, что же пошло не так. А если бы вы сперва запустили линтер, он бы обнаружил эту проблему.
2. Однообразный код
Автоматизация тестирования предполагает сотрудничество между несколькими тестировщиками, особенно в больших командах. Линтер обеспечивает однообразный, последовательный стиль кода и гарантирует, что все тестировщики будут следовать набору правил.
Последовательность в коде — это не только эстетика, это читабельность и уменьшение количества ошибок. Когда все следуют одним и тем же известным всем правилам, команде гораздо проще проверять, отлаживать и дописывать код по мере необходимости.
Представьте себе следующее: Вам передали автотест, который написал кто-то другой, и там полный ужас — код неупорядоченный, непоследовательный и непонятный. Вы теряете время, пытаясь расшифровать, что делает этот и этот кусок кода, затем теряете время, пытаясь заставить этот тест запуститься. С линтерами эта проблема становится менее актуальной.
3. Повышение эффективности
Автоматизация — это максимально быстрое и эффективное выполнение тестов. Линтеры помогают повысить эффективность, указывая на неэффективные методы работы с кодом, которые замедляют выполнение. Например, линтер предупреждает, если код содержит ненужные или слишком сложные циклы. Эти циклы могут не особо влиять на выполнение тестов, но могут существенно увеличивать время выполнения. Устранив эти недостатки, вы сможете сократить время выполнения, что всегда является преимуществом в CI/CD.
4. Лучшие практики
Линтеры часто поставляются со встроенными правилами, которые проверяют соблюдение лучших практик в кодировании. Для тестировщиков, пишущих автотесты, эти практики могут включать в себя, например, отказ от жестко закодированных ожиданий в Selenium, обеспечение нужных локаторов элементов, и использование осмысленных имен переменных.
Например, некоторые линтеры могут рекомендовать использовать const и let вместо var в JavaScript, чтобы избежать проблем, связанных с областью видимости. Таким образом, эти практики помогут обеспечить надежность и поддерживаемость тестов.
5. Сокращение времени на рецензирование кода
Написание чистого кода без ошибок означает меньше времени на исправление мелких ошибок во время ревью кода. Вместо того чтобы заставлять рецензента говорить: «Это вложенные циклы? Почему так медленно?» или «У этой функции 17 параметров — это как?», линтер заранее покажет подобные проблемы.
Линтеры позволяют сосредоточиться на логике тест-кейсов, а не на их структуре и синтаксисе. Это означает быстрое рецензирование и меньше исправлений.
Практический пример
Допустим, вы пишете автотест Selenium на JavaScript для страницы входа в систему. Без линтера ваш код мог бы выглядеть следующим образом:
// Без линтера driver.findElement(By.id("username")).sendKeys("testUser"); driver.findElement(By.id("password")).sendKeys("pass123"); driver.findElement(By.id("loginBtn")).click(); // нет точки с запятой!
Без точки с запятой в нужном месте — вы получите ошибку, которая остановит выполнение. Но если бы вы использовали линтер, он сразу же указал бы на эту ошибку, избавив от головняка.
Вот как линтер покажет эту проблему:
// Подсказка линтера: Предупреждение: Нет точки с запятой. Совет: Используйте const/let для объясления переменных.
С помощью линтеров вы мгновенно исправите ошибку и сосредоточитесь на написании эффективных тестов, а не на разборе синтаксических ошибок.
Какие линтеры существуют
Несколько хороших линтеров. Наиболее популярные:
- ESLint для JavaScript/TypeScript
- Flake8 и PyLint для Python
- Checkstyle для Java
- SonarLint для всех языков
Эти линтеры могут быть интегрированы в IDE, или запускаться как часть CI-конвейера.
Резюме
Считайте линтер своим помощником — он поможет вам не сбиться с пути и предотвратить ошибки до того, как они превратятся в серьезные проблемы. Речь идет не только о предотвращении мелких синтаксических ошибок, но и об экономии времени на ревью.