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 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К лідов з соцмереж для сайтів секційного огорожі і габіонів