В команді немає автотестерів - що робити?

Деякі з вас, можливо, чули, що в перший тиждень грудня по всій Росії пройшла освітня акція “Годину коду": для школярів 5-11 класів проводили відкриті уроки, на яких показували, що програмувати це просто і цікаво і кожен може цьому навчитися.



Ми Acronis вирішили поділитися власним досвідом: як ми пробуємо навчати програмування наших співробітників, не відриваючи їх від роботи.

Завдання

Як відомо, аксептанс-тестування продукту, за великим рахунком, зводиться до повторення однієї і тієї ж роботи від білду до билду. Тестувальники проганяють стандартні сценарії на кожному билде — іноді все підряд, іноді вибірково. Так чи інакше, є список дій, які треба періодично виконувати. Природно, виникає бажання автоматизувати цей процес.

Здавалося б, це зовсім нескладно: дано конкретні кроки та результати, які повинні в підсумку вийти, — але є одне велике «АЛЕ». Більшість тестувальників не володіє мовами програмування. Коли ми в Acronis зіткнулися з цією проблемою, у нас виникла ідея знайти інструмент, який умів би виконувати тестові сценарії, написані людьми без кваліфікації розробника. Тестувальники будуть писати сценарії, як і раніше (може, трохи більше формалізовано), але виконувати ці сценарії буде не людина, а машина.

Інструмент

В автоматизації вже давно склалися кілька загальноприйнятих істин: наприклад, keyword-driven або data-driven підходи, BDD (Behavior Driven Development) і ATTD (Acceptance Test Driven Development), написання тестових бібліотек під ваш додаток, генерація звітів і т. д. В якості інструменту для нашого завдання ми вибрали Robot Framework, який об'єднує всі ці речі воєдино. Це open-source фреймворк, який в першу чергу призначений для автоматизації приймального тестування і ATTD. При цьому його можливості виходять далеко за ці рамки і дозволяють створити потужний каркас для автоматизації тестування з орієнтацією на різні потреби.

Ми зупинилися саме на цьому фреймворку з кількох причин. По-перше, тому що в ньому є інструменти для тестування веб-сторінок і веб-додатків. По-друге, є великий набір пакетів розширень: ми, наприклад, використовуємо аддон управління машинами через SSH. Нарешті, Robot Framework заснований на принципі keyword-driven тестування, тобто на розробці ключових слів, які потім можуть використовувати навіть люди, які не дуже добре розбираються в програмуванні.



Цей підхід дуже зручно використовувати для побудови автоматичних тестів. Тести пишуться на высокоуровневом мовою і можуть бути в теорії написані будь-якою людиною, який знає, як тестувати продукт.

Наприклад,:
open browser
welcome page should be opened
username field should be visible
password field should be visible
login button should be visible
input username $username
input password $password
press login button

На підставі ключових слів можна легко будувати тести з різними даними на вході, або ж перетворювати тести в читаний і виконуваний текст. У Robot Framework вбудовані бібліотеки для автоматизації веб-додатків, баз даних, дій із файловою системою, SSH, Swing, SWT, Windows GUIs і т. д. Також в цьому фреймворку є редактор тестів і багато додаткових плагінів для інтеграції в будь-які проекти. В цілому архітектура фреймворку побудована таким чином, що можна без праці розширювати вихідну функціональність і писати власні бібліотеки мови Python або Java.

Реалізація

До початку експерименту більша частина наших сервісів вже була покрита функціональними тестами, які написали на «пітоні» самі розробники. При цьому тестами не була покрита веб-консоль і точки інтеграції між нею і сервером. Ми вирішили, так би мовити, «вбити відразу двох зайців»: навчити тестувальників писати автоматичні тести і залучити фронт-енд розробників для написання базового функціоналу і ключових слів на нижньому рівні. Наприклад, код фрази «open browser» у Robot Framework виглядає наступним чином:

*** Keywords ***
open browser
[Arguments] ${url}
run keyword if '${DEBUG}' == 'false' set log level debugging
Browser.open browser ${url} ${BROWSER} desired_capabilities=service_args:--ignore-ssl-errors=true;--ssl-protocol=tlsv1;--debug=${DEBUG};--disk-cache=true;--max-disk-cache-size=204800
set browser implicit wait ${IMPLICIT WAIT}
set selenium speed 0.2 s
delete all cookies
set window size 1400 1280 # for PhantomJS
maximize browser window

В цілому фреймворк дуже простий у використанні, так що наші фронт-енд девелопери швидко освоїли і почали покривати тестами найбільш болючі ділянки коду. На наш погляд, варто окремо відзначити хорошу систему звітів, яка надається роботом з коробки. Хоча нам і не довелося нею особливо користуватися, оскільки у нас вже була своя власна система звітів для тестування.



Інтеграція Robot Framework з нашою системою побудови звітів не викликала особливих проблем. Робот підтримує будь-який вид аддонов для звітів: для цього потрібно всього лише написати питоновский клас з парочкою методів:

class CustomReporter:
def start_suite(self, name, attributes):
# put your code here

def end_suite(self, name, attributes):
# put your code here

def start_test(self, name, attributes):
# put your code here

def end_test(self, name, attributes):
# put your code here



Ще одна фіча, яку ми в даному випадку оцінили, — можливість групувати тести з допомогою тегів. Кожному тесту можна присвоїти той чи інший атрибут, а після вибирати для запуску тільки ті, які ним володіють. Наприклад, позначати тести, які виконуються довго, і не запускати їх при кожному прогоні. Ми використовуємо цю можливість в основному для того, щоб моніторити наші бойові сервери. Виділяємо частину тестів, які перевіряють доступність основних точок входу в систему, пишемо відповідний плагін (щоб результат був у форматі, зрозумілому для zabbix-agent) і в результаті маємо постійну систему моніторингу доступності нашого сайту.



За цим посиланням можна подивитися демо версію робота-фреймворку: клік

Що ж до залучення наших тестеровщиков до автоматизації, ми рухаємося в потрібному напрямку. Тепер до кожного багу або завдання у баг-трекері розробники пишуть сценарії «як перевіряти»: причому пишуть так, щоб можна було легко використовувати їх в роботі. Так, крок за кроком ми переконуємо наших тестерів, що програмування і тестування — це просто :)



Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.