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 мені знадобилися такі джерела:
- офіційна документація мови на python.org/doc/ ;
- відеоуроки на YouTube (наприклад, канали David Beazley , CS Dojo і Corey Schafer );
- портал «Записки програміста» ;
- запису відео з конференцій PyCon , Selenium Camp ;
- ресурси Codecademy , Codewars і StackOverflow .
Крім цього мені допомогли наступні фактори:
- Класичне технічне фундаментальну освіту. Крім навички швидко і легко навчатися, воно дало мені ще й знання парадигми ООП, і базовий курс 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 реально освоїти за місяць, якщо вам вже знайомий іншу мову програмування, навіть поєднуючи з зайнятістю на іншому проекті!
Опубліковано: 29/08/18 @ 11:04
Розділ Різне
Рекомендуємо:
7 причин жити і працювати в Харкові для IT-спеціаліста
Релокация в американську глибинку: мої 4 роки у Вісконсині
Product Management дайджест #5: правильні роадмапы, ефект Рингельмана і кращі доповіді з Mind the Product SF
Чому вони не їдуть з України: історії IT-спеціалістів
Більше 3К лідов з соцмереж для сайтів секційного огорожі і габіонів