На сегодняшний день многие проекты, имеющие сложную разнообразную функциональность, характеризуются очень короткими промежутками между релизами. В таких случаях приходится часто выполнять большое количество повторяющихся проверок (регрессионных тестов). Возможно, этот факт и является главной (хотя и не единственной) движущей силой активного развития автоматизации тестирования. Все больше компаний в сфере IT принимают решение оптимизировать процесс тестирования, сократив затратные по времени и финансам действия.
При этом автоматизация является довольно молодым направлением. Опытных специалистов, владеющих соответствующими навыками, как правило, не хватает. Зачастую встает задача подготовить таких специалистов самостоятельно внутри компании в разумные сроки. Однако, освоение автоматизации предъявляет высокие требования к технической подготовленности тестировщика, так как от него требуется читать и писать программный код, редактировать конфигурационные файлы, читать логи и т. д. В этой статье речь как раз пойдет о том, какие именно шаги можно предпринять для достижения нужного уровня технической подготовленности такого специалиста.
Мне пришлось осваивать автоматизацию «с нуля», т. е., не имея академического образования в сфере IT, навыков программирования и практики работы в смежных «технических» направлениях (например, в системном администрировании). Теперь, уже имея опыт написания тестов на двух языках программирования (Python и Java) и продолжая совершенствоваться в сфере автоматизации, я дам рекомендации, как приобрести нужные знания и опыт.
Приобрести знания и опыт
1. Учите английский (если еще не владеете им хотя бы на уровне intermediate).
Такая рекомендация в качестве самой первой может показаться неожиданной. Дело в том, что хотя бы среднее знание английского языка является необходимым для освоения любой «технической» области в IT (автоматизация тестирования, разработка программного кода, системное администрирование). Большая часть документации, полезных статей, обсуждений на форумах и площадках наподобие stackoverflow, как и большинство обучающих онлайн-курсов и программ, записаны на английском языке (даже если он не является родным для автора).
Фактически, знание английского является международным стандартом в сфере IT. Соответственно, владение им открывает для вас широкие возможности. Я не случайно подчеркнул – «хотя бы на уровне intermediate». Важен не только высокий уровень владения языком (хотя среднего уже достаточно для решения многих задач), но и то, что изучение литературного или разговорного языка всегда происходит дольше, чем изучение языка программирования или технологии.
Научиться писать несложный программный код, который действительно выполняет полезные задачи, можно за пару-тройку месяцев. Освоить хотя бы элементарный уровень владения иностранным языком за это же время гораздо сложнее. Если вы еще не владеете английским, то начните изучать его прямо сейчас. Да, это займет время. Но каждое новое слово, которое вы запомните, поможет вам лучше понимать документацию и обсуждения.
2. Учитесь читать код.
Прежде чем вы напишете что бы то ни было реально работающее и решающее полезные задачи, вам придется читать, а именно просматривать строки кода и логи, пытаться понять, что идет не так при отладке тестов. При этом навык чтения кода будет универсален, так как многие базовые идеи и понятия являются общими для большинства современных языков программирования: объявление переменных, типы данных (строка, целое, булевские значения «истина/ложь» и т. д.), массивы и условные конструкции (if/else).
С чего же начать развивать навык чтения? Желательно, с несложных вещей. Например, просматривая очередную веб-страничку, нажмите Ctrl+U и попытайтесь изучить структуру html-кода, который увидите. При этом не важно, чтобы вы поняли все. Разберите небольшой фрагмент, поищите описания тегов.
С одной стороны, html является языком разметки (не языком программирования), потому относительно несложен для понимания. С другой стороны, это хорошее подготовительное упражнение, так как при написании автоматизированных тестов, исполняемых через графический интерфейс в браузере (самая обширная область автоматизации на сегодня и вместе с тем самая несложная в освоении), вам придется часто просматривать html-код странички. Это пока не программирование, но уже чтение кода, при котором глаза привыкают искать нужную строчку и анализировать структуру.
3. Учитесь писать код.
Следующим вашим шагом должно стать освоение несложного онлайн-курса по программированию для начинающих, при прохождении которого вы будете делать самые простые базовые операции, сопровождаемые подробными комментариями. На сегодняшний день выбор обучающих ресурсов довольно обширен. Попробуйте поискать по запросам «programming for kids», «online coding courses for beginners». Я рекомендую ресурс codecademy. Курс по языку Python, пройденный на этом сайте, позволил мне без особенных проблем написать тесты для первого проекта. Могу с уверенностью сказать, что форма обучения на нем удобна, а задания не слишком сложны для понимания новичком. Вообще, при возможности начните с изучения Python. Это серьезный язык программирования со всей широтой возможностей, его синтаксис несложен, и код хорошо читается.
Но не бойтесь «великого и ужасного» языка JAVA! В нем сначала пугает разнообразие модификаторов (public, protected, private) и строгая типизация (вы должны сразу указать, что именно хранится в переменной: строки, числа и т. д.). Однако, если вы все свои тестовые классы и методы объявите public («нет ограничений доступа»), то с большой вероятностью не изменится НИЧЕГО. Что касается типизации, то вы почти всегда в своем тесте знаете, что хотите получить: строку текста или число, true/false или еще что-то. Так что это тоже не вызовет проблем.
4. Запишите свои первые тесты рекордером и преобразуйте их в код.
Есть вспомогательные инструменты для записи тестов – так называемые рекордеры (например, Selenium IDE и Selenium Builder). Вы можете установить их, запустить перед тем, как начнете записывать тест, и далее выполнять необходимые манипуляции в браузере. Ваши действия будут записаны в виде последовательности несложных команд. Вы можете сохранить эту последовательность и запускать для самостоятельного повторения браузером вашего теста. Даже на таком уровне легко производится автоматизация рутинных проверок и уменьшается количество ручной работы. Прелесть этих инструментов заключается и в том, что вы довольно быстро понимаете – писать код самому удобнее.
Составив первые тесты с помощью рекордера, проанализируйте последовательность полученных команд. Попробуйте самостоятельно ввести какие-либо действия или изменить существующие. Это удивительно, но как только вы выделите часто используемые команды и проанализируете их характерные последовательности, вам сразу станет удобнее добавлять их самому, не прибегая к автоматической записи.
Следующим вашим шагом станет преобразование инструкций записанного теста в язык программирования. Selenium IDE и Selenium Builder дают такую возможность. Проанализируйте сгенерированный код. Вы обнаружите, что многие фрагменты текста весьма похожи на уже знакомый и понятный язык команд рекордера, просто они уже включены в конструкции выбранного языка программирования. С высокой вероятностью будет найдено некоторое количество ошибок и недочетов в последовательности действий. Это нормально. Механизм преобразования пока не идеален. Но вместе с тем, обнаружив такие ошибки, вы получите возможность их исправить и обретете уверенность в понимании кода.
Как только вы сами нашли ошибки в нескольких тестах и сумели их исправить, восстановив желаемую последовательность действий, рекордер становится вам практически не нужен. Таким образом, у вас есть все для того, чтобы продолжить писать тесты на языке программирования, обращаясь к самостоятельно подготовленным фрагментам кода.
5. Начните покрывать автотестами план регрессионного тестирования.
Эта рекомендация касается не только процесса освоения знаний в области автоматизации. Важно, чтобы ваши усилия по приобретению этих знаний не оказались напрасными на данном конкретном проекте. Ускорение прохождения регрессионных тестов – самое часто встречающееся применение автоматизации на сегодняшний день, хотя и не единственное. Нужно быть готовыми к тому, что конкретные цели и задачи, которые ставятся перед специалистами по автоматизации, не всегда четко обозначаются в самом начале работы. Вам потребуется время, чтобы выявить потребности конкретного проекта и сделать это нужно обязательно. Но даже до тех пор, пока задание не прояснится в полной мере, вы уже сможете получить полезные результаты с помощью автоматизации регрессионных тестов, продолжая оттачивать свои навыки. Если вы сумеете обнаружить другие области, где применима автоматизация для вашего проекта (например, создание тестовых данных, подготовка тестовых окружений), ваша полезность только увеличится.
6. Пройдите обучающие курсы.
Выберите, например, курсы Алексея Баранцева (известного специалиста по автоматизации в РФ), курс от компании Luxoft или любой другой, где тренер поможет вам разобраться с материалом. Это сэкономит время (и ваше личное, и вашего проекта) в тех нередких случаях, когда вы будете привлечены к участию в автоматизации тестирования, не обладая нужными знаниями. Поинтересуйтесь, возможно, ваш проект согласится оплатить эти курсы. В любом случае, решающая роль остается за вашей готовностью к самостоятельной работе.
7. Общайтесь с коллегами.
Не стесняйтесь спрашивать, общайтесь с коллегами-автоматизаторами регулярно и независимо от уровня ваших знаний. Например, создайте общий чат, найдите тематический форум или группу в соцсетях. Обсуждайте решения. Вы можете писать тесты на разных языках либо использовать разные фреймворки запуска тестов одного языка, но алгоритмические и архитектурные решения все равно будут иметь много общего. Кто-то будет знать больше вас – он может подсказать вам. Кто-то весьма вероятно будет знать уже меньше вас – вы сможете подсказать ему и еще раз уложить знания по вопросу в голове.
8. Улучшайте свой стиль написания кода.
Первый код, который вы получите с помощью конвертации, будет представлять собой простую последовательность элементарных команд, содержащую повторяющиеся фрагменты. Он окажется не очень удобным для понимания, когда вы проанализируете его по прошествии времени. К тому же, он будет неудобным для поддержки, ведь одно и то же изменение придется вносить в несколько разных мест. Вы столкнетесь с так называемым «спагетти-кодом», т. е. плохо структурированным, неудобным для работы.
Чтобы улучшить его качество, рекомендую выполнить следующие действия:
- Выявить повторяющиеся последовательности действий и вынести их в отдельные методы. Давайте методам понятные осмысленные названия (например, для метода, нажимающего кнопку поиска, хорошим названием будет clickSearchButton() ). Этим достигается более компактная и понятная запись теста, а также возможность при необходимости вносить изменения только в одном месте (например, если изменится веб-элемент, представляющий нажимаемую кнопку).
- Комментировать код. Это облегчит его понимание и вам, и тем, кто его будет просматривать после вас.
- Изучить и применить шаблон проектирования тестов Page Object. На сегодняшний день это стандарт при разработке автоматизированных тестов.
- Уделить время знакомству с принципами ООП (объектно-ориентированное программирование), так как именно этот подход используется для паттерна Page Object.
Выполнение этих рекомендаций поможет написать удобный в поддержке код, понятный вам и вашим коллегам-автоматизаторам.
В заключении
Хочу еще раз отметить, что самое главное – это ваша готовность регулярно самостоятельно учиться и находить ответы. Вы часто будете сталкиваться с новыми вопросами, ответы на которые только предстоит узнать, и никогда не будете знать достаточно. Но этот факт совершенно не мешает развиваться в области автоматизации и разрабатывать интересные и полезные решения.
Поэтому не ограничивайте себя в выборе задач теми областями, что вы уже знаете. Выбирайте новую интересную задачу и приобретайте необходимые знания в процессе ее решения. Именно такой подход позволит вам быстро продвигаться вперед и становиться профессионалом в выбранной области.