Наскрізне тестування за допомогою GitLab CICD та WebdriverIO GitLab

Програми для перегляду чудові: для кожного запиту на злиття (або гілки, з цього приводу) новий код можна скопіювати та розгорнути у свіжому виробничому середовищі, зменшуючи зусилля для оцінки впливу змін. Таким чином, коли ми використовуємо менеджер залежностей, такий як Dependencies.io, він може подати запит на злиття з оновленою залежністю, і відразу буде зрозуміло, що додаток все ще може бути належним чином побудований та розгорнутий. Зрештою, ви бачите, як він працює!

тестування

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

У цій статті ми обговоримо, як писати такі наскрізні тести, і як налаштувати GitLab CI/CD для автоматичного запуску цих тестів за вашим новим кодом на основі розгалуження. Для обсягу цієї статті ми проведемо вас через процес налаштування GitLab CI/CD для наскрізного тестування програм на основі JavaScript за допомогою WebdriverIO, але загальна стратегія повинна переноситися на інші мови. Ми вважаємо, що ви знайомі з GitLab, GitLab CI/CD, Review Apps і запускаєте свій додаток локально, наприклад, на localhost: 8000 .

Що перевірити

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

Селен та WebdriverIO

Селен - це програмне забезпечення, яке може керувати веб-браузерами, наприклад, щоб змусити їх відвідувати певну URL-адресу або взаємодіяти з елементами на сторінці. Нею можна програмно керувати з різних мов програмування. У цій статті ми будемо використовувати прив’язки WebdriverIO JavaScript, але загальна концепція повинна досить добре переноситися на інші мови програмування, що підтримуються Selenium.

Тести письма

Функції опису, його та браузера забезпечуються WebdriverIO. Давайте розберемо їх по одному.

Функція опису дозволяє групувати відповідні тести. Це може бути корисно, якщо, наприклад, ви хочете запустити одні й ті самі команди ініціалізації (використовуючи beforeEach) для декількох тестів, наприклад, переконавшись, що ви ввійшли в систему.

Функція, яку він визначає, індивідуальний тест.

Об'єктом браузера є спеціальний соус WebdriverIO. Він надає більшість методів API WebdriverIO, які є ключем до керування браузером. У цьому випадку ми можемо використовувати browser.url, щоб відвідати/сторінку, яка не існує, щоб потрапити на нашу сторінку 404. Потім ми можемо використовувати browser.getUrl, щоб переконатися, що поточна сторінка справді знаходиться у вказаному нами місці. Для взаємодії зі сторінкою ми можемо просто передати селектори CSS браузеру browser.element, щоб отримати доступ до елементів на сторінці та взаємодіяти з ними - наприклад, натиснути на посилання назад на домашню сторінку.

Простий тест, показаний вище, вже може надати нам багато впевненості, якщо він пройде: ми знаємо, що наше розгортання вдалося, що елементи видно на сторінці і що реальні браузери можуть взаємодіяти з нею, і що маршрутизація працює, як очікувалося. І все це лише за 10 рядків з безпрограшними пробілами! Додайте до цього наступні модульні тести та успішно завершений конвеєр, і ви зможете бути впевнені, що оновлення залежностей нічого не зламало, навіть не заглядаючи на ваш веб-сайт.