Конференция DSE Fest — технично и понятно про data science для разработчиков. Смотри детали на сайте
×Закрыть

Python Challenge, или Как я ознакомился с автоматизированным тестированием за месяц

Чему разработчик научит Manual QA Engineers? Уж точно не тестированию, в этом они профессионалы! Но он может ответить на многие важные вопросы автоматизации, точнее дать базовые знания программирования, которые необходимы QA для успешной работы. Как программисту разобраться в написании автотестов на Python за месяц на уровне, достаточном для обучения тестировщиков, чему стоит их учить — узнайте из этой статьи!

Преамбула

Программирование я полюбил еще во время учебы в институте. Меня настолько увлекала эта сфера, что на старших курсах я разработал методичку и вел практические занятия по кластерным вычислениям в Харьковском национальном экономическом университете.

Сегодня у меня около пяти лет опыта в разработке. За это время освоил несколько технологий: был .NET специалистом, окунулся в веб-разработку на JS и даже успел немного разобраться в Markup. Осенью 2017 года мне сделали предложение, от которого я не мог отказаться: освоить Python и провести внутренний курс по автоматизированному тестированию для специалистов Dev-Pro. Овладеть новой технологией, а затем побывать в роли тренера? Challenge accepted!

Раньше мне не приходилось сталкиваться с Python, но я был мотивирован и полон энтузиазма! QA отдел составил мне программу изучения, основываясь на том, что необходимо изучить Manual QA Engineer для перехода в автоматизаторы. Это послужило мне своеобразной дорожной картой в личном обучении и в подготовке курса.

Как это было

Я разбирал каждую тему из моего списка, держа в уме будущий курс и акцентируя внимание на моментах, которые были мне самому непонятны. Факт того, что у меня не было опыта в Python, стал плюсом. Коллеги-эксперты в автоматизированном тестировании составили программу курса, а я смог разобрать язык так, чтобы объяснить его тем, кто с ним ранее не сталкивался вообще.

Параллельно я был Team Lead на корпоративном благотворительном проекте, где мы на Angular создавали сайт для приюта «Порятунок тварин Харків». Тогда мой типичный день выглядел примерно так: четыре часа я работаю с JS, два часа — изучаю Python, еще два — готовлю курс.

В итоге мы успешно запустили сайт, я освоил написание автотестов и создал программу внутреннего курса. Она состояла из 18 лекций: от синтаксиса и написания простых программ до парадигмы ООП в тестировании, плюс задания для самостоятельной работы.

Материалы и рекомендации

Для изучения тестирования на Python мне пригодились такие источники:

Помимо этого мне помогли следующие факторы:

  • Классическое техническое фундаментальное образование. Кроме навыка быстро и легко обучаться, оно дало мне еще и знание парадигмы ООП, и базовый курс QA. Это тот фундамент, на котором я построил новое знание.
  • Технический бэкграунд. Опыт .NET и JS помог мне быстрее разобраться со структурой и синтаксисом нового языка.
  • Четкая цель. Python очень объемен: он применяется и в Web-разработке, и в системном администрировании, и в научных исследованиях. Однако у меня не было задачи создать Огромного Человекоподобного Робота, мне нужно было автоматизированное тестирование.
  • Мотивация — тоже важный элемент. Стать тренером и испытать себя в новой роли!
  • Грамотный тайм-менеджмент. Мне необходимо было правильно распределить время между несколькими задачами, курировать команду разработчиков и при этом не забывать про учебу. Именно умение планировать помогло мне успеть все.
  • Обязательства. Мне всегда нравилось преподавать, а тут мой курс ждали студенты, на меня рассчитывала компания — я просто не мог не справиться! Когда делаешь что-то для себя, всегда есть риск, что в какой-то моменты ты столкнешься с трудностями и махнешь рукой. Но когда на тебя рассчитывают другие люди, сдаваться нельзя!

Многие могут спросить: почему курс по QA Automation доверили девелоперу, а не тестировщику?

Что такое автоматизированное тестирование

Все начинается с написания простого скрипта. А чтобы написать скрипт, надо иметь навыки программиста. Зачастую специалисты, которые хотят стать автоматизаторами, пришли из ручного тестирования и никогда не занимались разработкой программного обеспечения. Моя задача как раз в том, чтобы научить их программировать и дать лучшие практики написания кода.

В моем понимании хороший код обладает такими характеристиками:

  • Удобен для повторного использования.
  • Написан с использованием принципов проектирования ПО.
  • Имеет лаконичную и понятную структуру.
  • Программная часть легко поддается расширению и изменениям.

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

Если брать шире, то следование этим практикам позволяет проекту жить, а не утонуть в плохом коде, специалист, зайдя в проект через пару месяцев, не поседеет от ужаса, а новичок сможет быстро разобраться что к чему.

Этапы обучения

Теперь у меня уже есть опыт проведения как курсов для новичков в программировании, то есть QA-специалистов, которые занимаются ручным тестированием, так и более опытных в автоматизации ребят, проявивших желание изучить именно Python. Если мы говорим о первом курсе из 18 лекций, то он был рассчитан на тех, кто не написал ни строчки кода в своей жизни. Именно поэтому я могу условно разбить занятия на три модуля:

1. Знакомство с программированием, точнее — языком Python. Здесь мы говорим о базовых концепциях. Узнаем, как организовывать данные, об условных операторах и циклах, функциях и параметрах, коллбэках, модулях, системе импорта в Python.

Зачем тестировщикам эти знания? Без них хороший код, который требуется — не написать. Они буквально не смогут перейти на этап создания автотестов без умения оперировать фундаментальными понятиями. Для меня сложность в подготовке этого модуля состояла в том, что я должен был досконально изучить все детали, разобраться, как работает язык, чтобы отвечать на все вопросы моих учеников. Например, почему в документации написано одно, а работает по-другому. Недостаточно просто принять эту данность, но нужно раскопать истинную причину. И так с каждой деталью.

2. Подробно мы поговорим о втором модуле — про более углубленное изучение языка. Эти знания нужны, дабы мы могли полноценно использовать все возможности Python при написании тестов. О каждом элементе расскажу детальнее, чтобы возьмись вы изучать автоматизацию на этом языке — сразу обратили внимание на важные аспекты и не распылялись.

2.1. Collections. Basic Algorithms — во время написания программ всегда приходится работать с данными. Чем более удобно они представлены, тем нам легче с ними оперировать. У Python много интересных фишек и дополнительных возможностей, которые значительно упрощают работу с данными. Одна из них — специализированные структуры данных. QA-специалисты наверняка столкнутся с этим.

2.2. Iterators. Generators. Decorators. Когда пишешь свой скрипт, обязательно работаешь с итерированием коллекций и генерацией данных. Интеграторы и генераторы помогают справиться с различными сложными ситуациями, связанными с этим аспектом, например, именно генераторы позволяют не сразу считывать весь файл в память (так как он может быть очень большим), а построчно — облегчая процесс. Декораторы же в свою очередь позволяют нам добавить какую-нибудь функциональность к уже имеющейся, порой это очень удобно, принести домой ёлку, декорировать её новогодними игрушками и получить новогоднюю ёлку.

2.3. Exception handling. Operations with files. Почти в любом программе могут возникать исключительные ситуации, их нужно уметь обрабатывать, этому мы и учимся! Кроме того, не обойтись без знания, как открыть и прочитать файлы.

2.4. OOP and Python. Есть два подхода к написанию тестов: функциональный, сторонником которого я не являюсь, и стиль ООП. Второй метод мне больше по душе, потому что позволяет делать все более организованно. Более того, эти знания точно пригодятся при написании тестового фреймворка. Плюс, у Python есть свои особенности касательно ООП, с которыми обязательно нужно знакомиться, даже если вы разбираетесь в этой теме в рамках других языков.

2.5. MetaClasses. ContextManager. Эта возможность Python позволяет на лету генерировать тестовые методы. То есть вам не понадобится плодить десятки подобных тестов-методов, вместо этого их можно генерировать. Это возможно благодаря мета-программированию в Python. ContextManager — фишка, которая не даст вашему коду заблокировать какой-либо ресурс: проследит, что открытый файл или открытый connection к базе данных был закрыт после завершения программы.

2.6. Design patterns. На занятиях, посвященных этой теме, мы изучаем лучшие практики, выясняем, как решать типичные проблемы, с которыми сталкиваются как автоматизаторы, так и рядовые разработчики.

3. В рамках третьего модуля мы переходим непосредственно к созданию автотестов. Темы, о которых я говорю, это: Functional testing, Integration testing, Unit testing, API architecture approaches, Load testing, Acceptance testing, Selenium, OOP in tests Selenium, OOP in tests. Page Object Pattern — это темы для отдельного материала!

Для более опытных специалистов я сразу начинаю курс со второго модуля.

Выводы

Итак, подведем итог. С чего стоит начать QA-специалисту, который решил освоить автоматизированное тестирование без какого-либо опыта в этом вопросе?

С азов! Особенно рекомендую ресурсы типа Code School и Code Academy, о которых уже писал выше. Составил небольшой список, который рекомендую своим студентам перед курсом:

Разумеется, необходим хороший уровень английского и опыт в тестировании. Но, как я убедился на собственном примере, автоматизированное тестирование на Python реально освоить за месяц, если вам уже знаком другой язык программирования, даже совмещая с занятостью на другом проекте!

LinkedIn

11 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Ну как по мне, взгляд опытного девелопера и автоматизатора на автоматизацию...слегка разные. Углубленное знание языка автоматизатору понадобиться ближе уже к переходу в синьеры, многие вещи на стадии джун/мидл использоваться не будут и попросту забудутся, а по началу есть куча других моментов в которых нужно разбираться и довести до автоматизма.

программа составлена очень так себе. Мало как связана с автоматизацией. И слишком избыточная, метаклассы — это вообще за гранью)). Афтор, песчи есче

Но, как я убедился на собственном примере, автоматизированное тестирование на Python реально освоить за месяц, если вам уже знаком другой язык программирования

чистая правда,
да и это тоже:

С чего стоит начать QA-специалисту, который решил освоить автоматизированное тестирование без какого-либо опыта в этом вопросе?
С азов!

Александр, успехов вам в дальнейших начинаниях!

Ну вам я вірю що ви за місяць розібрались з написанням автотестів на пайтоні, так як:

Программирование я полюбил еще во время учебы в институте.

на бухгалтера чи географа мабуть вчились, як і я та багато свічерів? ну це так ремарка
і

Сегодня у меня около пяти лет опыта в разработке.

Іншим людям за місяць навчитись цього... ем як би то сказати?

Коротше, вітаю всіх тостерів з виходом «як стати Python тестером за 21 день»

Розбирати метакласи в перший місяць і вчити інших? Я якось аж відчув себе нікчемою.

І взагалі порада всім автомейшинам — ніколи не юзайте метакласи, хіба якщо ви дійсно знаєте, як вони працюють. Але ліпше таки не юзайте.

Как программисту разобраться в написании автотестов на Python за месяц на уровне, достаточном для обучения тестировщиков, чему стоит их учить — узнайте из этой статьи!

Какой-то абсурд. Есть автоматизаторы, которые уже умеют писать автотесты и делают это годами. Наверное, они лучше обучат мануальных тестировщиков написанию автотестов, чем тот кто делает это 1 месяц.

мне сделали предложение... освоить Python и провести внутренний курс по автоматизированному тестированию для специалистов

Человек ведь указал причины. И вот совсем не факт, что годовалые автоматизаторы могут/хотят/готовы создавать курс с нуля (как это сделал автор) и качественно обучать мануальных тестировщиков.

Опытный автоматизатор расскажет о реальной автоматизации, акцентирует на том что важно именно для автоматизации тестирования.
Девелопер же просто воспользовался возможностью и выучил еще один язык программирования за счет конторы. Какие реальные проекты он автоматизировал чтобы на них опираться?
Я бы еще понял, если бы он будучи Python-разрабом сделал курс для действующих Python-автоматизаторов по углубленному изучению данного языка.
А так, после 1 месяца — это несерьезно, мягко говоря.

И вот совсем не факт, что годовалые автоматизаторы могут/хотят/готовы создавать курс с нуля (как это сделал автор) и качественно обучать мануальных тестировщиков.

При этом факт что человек который занимается автоматизацией менее месяца не сможет подготовить качественный курс. Банально по причине отсутствия знаний.

Подписаться на комментарии