Чи слід включати тест інтеграції в безперервну інтеграцію (CI)?


11

Припустимо, що ми розробляємо веб-додаток, і Хадсон виконує типові завдання, такі як компіляція, тестування блоку та аналіз статичного коду.

Але складна частина полягає в тому, що Хадсон розгортає і запускає сервер додатків, щоб робити тести інтеграції , як тільки попередні завдання будуть виконані.

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

Як ви вважаєте, чи слід включити тест інтеграції до продовження інтеграції (CI)? Це можна вручну? Або спростити інтеграційний тест?


2
Ваша проблема полягає в якості тестів, а не в частині ІС. В інтеграційному тестуванні, як і раніше, є доброю практикою висміювати залежності.
Люк Франкен

Відповіді:


8

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


4
Але « Неперервний» теж є. Якщо тести на інтеграцію займають хвилини або години, це не безперервно.
U2EF1

@ U2EF1 налаштував дискретний сервер інтеграції.
Каяман

1
@Kayaman ваш коментар - єдиний результат в Інтернеті для "сервера дискретної інтеграції". Чи можете ви уточнити, що ви маєте на увазі?
Штійн

3

Як ви вважаєте, чи слід включити тест інтеграції до продовження інтеграції (CI)?

Якщо у вас є тести на інтеграцію, які проходять, і не вимагаєте, щоб хтось фактично стояв там і натискав кнопки, то так - вам слід додати їх до системи CI.

Але оскільки виконання тестів на інтеграцію може зайняти дуже багато часу, вам слід обмежити, наскільки часто вони виконуються. Вони можуть виконуватися протягом ночі, коли сервер CI не працює.


3

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

Мартін Фаулер говорив про безперервну доставку як про спосіб автоматизації повного процесу збирання для швидкого розгортання. Це вимагає від розробників швидкого зворотного зв’язку, який надає процес постійної інтеграції. Тож він визначає етапи, через які збирання має пройти :

  1. компіляція
  2. ретельне тестування
  3. розгортання

Він стверджує, що складання зобов'язань не повинно зайняти більше 10 хвилин, через швидкий зворотний зв'язок для розробників.

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

Коли це успішно, ви переходите до тестової частини інтеграції. Тут ви перевіряєте взаємодію щойно успішно перевірених підрозділів. Це передбачає живлення одиниць введенням та перегляд їх стану / взаємодії / виводу. Пам'ятайте, що ми все ще перебуваємо на складанні комітетів, тому хочемо, щоб це також було швидко. Таким чином, взаємодія з файловою системою, базою даних, мережевими одноранговими програмами тощо повинна бути налаштована для швидкого виконання. Мартін Фаулер також натякає на використання баз даних у пам'яті, якщо вони потрібні, просто для швидкого виконання на сервері CI.

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.