article-spots
article-carousel-spots
programs
Технологии

Ликбез по автотестированию: что изучать и где найти

9 дек. 2021

Всем привет! Меня зовут Илья Любимов. Я 2,5 года работаю инженером по автоматизации тестирования. В современном мире невозможно представить разработку программного обеспечения без тестирования. Крупные компании вкладывают огромные деньги в отделы качества, так как у пользователей сложились определённые ожидания от готового продукта. И бизнес стремится удовлетворить их, стараясь заранее предупредить возможные ошибки в приложениях. В некоторых случаях команды разработки могут обойтись и ручным тестированием, однако в большинстве случаев необходимы автотесты. 

Если вы решили стать автоматизатором, то встаёт резонный вопрос: «Какие знания необходимы на входе в автоматизированное тестирование?» На этот вопрос я постараюсь ответить в этой статье. 

Курсы 

Обучение начинается именно с теории — текстов и документации по основным фреймворкам и языкам программирования. Плюс теория по тестированию в принципе. Её можно найти на обучающих порталах, например: 

  • Coursera.org — наверное, самый популярный ресурс на планете для обучения и переквалификации. Можно даже получить магистерскую степень зарубежных вузов. Там вы точно найдёте материалы по автотестированию. Осторожно: много английского! 
  • Stepik.org — русскоязычный портал с различными курсами: просто, бесплатно и интересно. 

Книги  

«Тестирование dot com» Романа Савина — must-read для начинающих тестировщиков. Об этой книге и других ресурсах я подробно написал в этой статье

Основные понятия 

Также стоит иметь представление о пирамиде тестирования и разных типах тестирования — это есть в книге Романа Савина. Далее, что такое Agile и CI/CD — эти понятия часто идут рука об руку, поэтому советую поискать информацию о них в интернете. Для начала достаточно будет поверхностных знаний, глубина понимания придёт с опытом. Отдельно стоит посмотреть, что такое и как работают баг-трекинговые системы, и как вести документацию (об этом расскажу далее). 

Языки программирования 

Самые распространённые языки программирования (ЯП) для автотестировщика — Java, Python, C# и JavaScript. В целом вы можете обратиться к тем же обучающим порталам, которые я привёл выше, но есть один важный момент. Вам просто необходимы проекты на выбранном ЯП, которые вы можете приложить к своему резюме. А иначе как вы сможете доказать, что действительно знаете программирование? 

Основы разработки ПО 

Тут начинается всё самое сложное 😊 Базовые знания ООП, коллекций, типов данных, исключений, циклов, распространенных фреймворков и библиотек, Git. Разберёмся с некоторыми пунктами отдельно (здесь и далее я буду рассказывать на примере Java).  

ООП 

Java — объектно-ориентированный ЯП, а значит от основ ООП здесь никуда не деться. Для начала необходимо разобрать основные термины ООП: инкапсуляция, наследование, полиморфизм и абстракция. 

Из статьи «Object-Oriented Design Principles»

  • Инкапсуляция — размещение одного объекта или класса внутри другого для разграничения доступа к ним. 
  • Наследование — способность объекта или класса базироваться на другом объекте или классе. Это главный механизм для повторного использования кода. Наследственное отношение классов чётко определяет их иерархию. 
  • Полиморфизм — реализация задач одной и той же идеи разными способами. 
  • Абстракция — отделение концепции от её экземпляра. 


Вам нужно уметь объяснять своими словами эти термины и как они реализованы в ЯП.

Коллекции 

Во-первых, необходимо знать иерархию коллекций, чем отличается List от Array, какие есть разновидности Map, их отличие, сложность операций. Во-вторых, что такое Set, HashSet, LinkedHashSet, TreeSet, какой принцип используется для хранения данных в коллекциях. 

Так, Collection и Collections — разные понятия. Collection — корневой интерфейс коллекций, а вот Collections — класс, состоящий из методов, которые оперируют или возвращают коллекции. 

Схемы классов Collection и классов Map:

На рисунках сплошными линиями представлены отношения Extends, а пунктиром — отношения Implements.  Эти отношения важны и всю информацию о них вы найдёте в теории по Java. 

Исключения 

Как и в случае с коллекциями, вам необходимо знать иерархию исключений (Exceptions), чем отличается Exception от Error, что такое обрабатываемые и необрабатываемые исключения (Checked/Unchecked Exceptions) и несколько примеров к ним. 

Если вкратце: 

Корневой интерфейс — Throwable. У него есть два «наследника» — Error и Exception. Error — это критическая ошибка во время исполнения программы, связанная с работой виртуальной машины Java, поэтому мы не можем обрабатывать ошибки, на этом всё. 

И если с Error можно вот так быстро закончить, то с Exception нет. Не все подклассы Exception обрабатываются (Checked). Так, класс RuntimeException — unchecked, значит, как бы мы ни старались, мы не сможем его обработать. Компилятор нам говорит, что в ходе компиляции ничего подозрительного не обнаружено (как правило мы доверяем компилятору), однако что-то пошло не так, и значит в коде есть ошибка. Примерами таких исключений: выход за границы массива и арифметические ошибки (деление на ноль).  

Базовые знания по автоматизации тестирования 

Теперь, когда мы разобрались с основами ЯП, можно поговорить про основные инструменты по автоматизации тестирования, которые мы используем в нашей работе каждый день. 

Работа автоматизатора состоит из 3 направлений: 

  • User Interface — если мы работаем с веб-приложениями и сайтами, то нам нужен инструмент, позволяющий проверять и взаимодействовать с элементами страниц. В большинстве случаев мы используем Selenium. 
  • Базы данных (Data Bases, DB) — как правило, можно обойтись знаниями написания SQL-запросов, не привязываясь к определенной СУБД. В этом вам поможет Metanit. В разделе о SQL есть уроки, вы можете попрактиковаться самостоятельно. 
  • Backend — автотестировщики пишут запросы к бэкенду и проверяют приходящие данные, исключая отображение на веб-странице. Здесь нам помогает утилита для отправки запросов к бэкенду Postman. А также библиотека RestAssured — она позволяет в понятной читаемой форме отправлять запросы и сопоставлять ответы к соответствующим классам в нашем фреймворке. 


А что же нам позволяет связать все эти аспекты работы автоматизатора воедино и писать полноценные production-ready фреймворки? 

Это JUnitTestNG и, конечно, Cucumber. Первые два — это библиотеки, они позволяют нам писать и подхватывать тесты из кода, структурируя их по разным группам. А благодаря Cucumber мы пишем фреймворки, используя подход BDD (Behavior Driven Development). Основная его идея — использовать такие словесные конструкции в наших тестах, что даже человек, ничего не понимающий в программировании, сможет прочитать и понять по шагам каждый реализованный тест. Для этого используется Gherkin Notation. Про Cucumber и Gherkin Notation можно почитать здесь и здесь

Git, Jira, Unix 

Теперь, разобрав необходимый минимум по ЯП и автотестам, стоит рассказать о смежных технологиях и инструментах разработки ПО: 

  • Git — система контроля версий, помогает отслеживать кто, когда и какие внёс изменения в проект. К тому же, позволяет «откатывать» изменения и работать в команде над одинаковым функционалом без необходимости синхронизации. Крайне важная и неотъемлемая часть работы любого программиста. Вам необходимо знать, как с ним работать. Вам сюда
  • Jira — незаменимый инструмент. Мой опыт подсказывает, что огромная часть компаний использует Jira для ведения задач и работы по Agile-методологии.  
  • Unix-системы — подавляющее большинство машин, на которых «крутится» бэкенд и проходит развёртка компонентов приложения, работает на дистрибутивах Unix-систем. Поэтому очень важно знать на базовом уровне, как работать с системой через терминал на удалённой машине путём SSH-подключения. 


На мой взгляд, это необходимый минимум знаний, чтобы уверенно стартовать в профессии автотестировщика. Возможно, вы уже знали это и просто освежили в памяти. А кому-то действительно будет полезно это руководство, и вы с горящими глазами пойдёте изучать что-то новое и интересное. Потому что автоматизированное тестирование именно такое. Главное, не забывайте тестировать, тестировать и ещё раз тестировать!