Я досліджую методи та стратегії для масштабування зростаючої кількості тестів на інтеграцію нашого поточного продукту, щоб вони могли (по-людськи) залишатися частиною нашого розвитку та процесу ІС.
На майже 200+ тестах інтеграції ми вже натискаємо позначку 1hr, щоб виконати повний тестовий пробіг (на машині Dev Dev), і це негативно впливає на здатність розробника терпіти запуск всього пакету як частину рутинних процесів push. Що впливає на мотивацію бути дисциплінованими щодо того, щоб добре їх створити. Ми інтегруємо тест лише ключових сценіорів спереду та назад, і використовуємо середовище, яке відображає виробництво, яке будується з нуля кожного тестового циклу.
Через час, необхідний для запуску, він створює жахливий цикл зворотного зв'язку і багато марних циклів, які чекають на машинах, щоб закінчити пробні пробіжки, незалежно від того, наскільки цілеспрямовані тестові пробіги. Не слід забувати про дорожчий негативний вплив на потік та прогрес, розумність та стійкість.
Ми очікуємо, що перед тим, як цей продукт почне сповільнюватись, у 10 разів більше тестів на інтеграцію (ідея насправді, але не відчувається, що ми навіть починаємо працювати з точки зору функцій). Нам доводиться обґрунтовано розраховувати, що вони будуть в декількох сотнях чи пару тисяч інтеграційних тестів, я вважаю в якийсь момент.
Щоб було зрозуміло, намагатися не допустити, щоб це стало дискусією про тестування одиниць порівняно з тестуванням інтеграції (що ніколи не слід торгувати). У цьому продукті ми проводимо тестування обох модулів за допомогою тестування TDD AND інтеграції. Насправді ми проводимо тестування інтеграції на різних шарах архітектури служб, де ми маємо сенс, тому що нам потрібно перевірити, куди ми вносимо порушення змін при зміні шаблонів нашої архітектури на інші області система.
Трохи про наш стек технологій. В даний час ми перевіряємо емуляцію (процесор та пам'ять), щоб виконувати наші тести від кінця до кінця. До складу якого входять веб-сервіси Azure REST, що створюють резервний сервер noSql (ATS). Ми моделюємо наше виробниче середовище, працюючи в Емуляторі робочого столу Azure + IISExpress. Ми обмежені одним емулятором та одним локальним сховищем для бекенда на кожній розробниковій машині.
Також у нас є хмарний CI, який виконує той самий тест у тому ж емульованому середовищі, і тестові запуски у хмарі займають удвічі більше (2 години +) у нашого поточного постачальника послуг CI. Ми досягли лімітів угоди про надання послуг у сфері хмарних послуг CI з точки зору продуктивності обладнання та перевищили їхні норми на час виконання тесту. Якщо бути справедливим до них, їх характеристики непогані, але наполовину гарніші, ніж явно нарізний настільний верстат.
Ми використовуємо тестову стратегію відновлення нашого сховища даних для кожної логічної групи тестів та попереднього завантаження тестових даних. Хоча всебічно забезпечується цілісність даних, це додає 5-15% впливу на кожен тест. Тому ми думаємо, що оптимізувати цю стратегію тестування на даний момент у розробці продукту мало.
Довгий і короткий з них полягає в тому, що: хоча ми могли б оптимізувати пропускну здатність кожного тесту (навіть якщо на цілих 30% -50% кожен), ми все ще не будемо ефективно масштабувати найближчим часом за допомогою декількох сотень тестів. 1 годину зараз ще набагато перевищує людський терпимість, нам потрібен порядок покращення загального процесу, щоб зробити його стійким.
Отже, я досліджую, які методи та стратегії ми можемо використовувати, щоб різко скоротити час тестування.
- Писати менше тестів - це не варіант. Дозвольте не обговорювати цю тему в цій темі.
- Використання більш швидкого обладнання - це безумовно варіант, хоча і дуже дорогий.
- Виконання груп тестів / сценаріїв на окремому апараті паралельно також визначено кращим варіантом.
- Створення групування тестів навколо функцій та сценаріїв, що розробляються, є правдоподібним, але в кінцевому підсумку не є надійним, щоб довести повне охоплення або впевненість, що система не впливає на зміни.
- Запуск у хмарному режимі інсценування замість запуску в емуляторі робочого столу технічно можливий, хоча ми починаємо додавати час тестування до тестових прогонів (~ 20 хвилин кожний на початку тестового запуску для розгортання матеріалу).
- Поділ компонентів системи на незалежні логічні частини є певною мірою правдоподібним, але ми очікуємо обмежений пробіг на цьому, оскільки, як очікується, з часом збільшуватимуться взаємозв'язки між компонентами. (тобто зміна не може вплинути на інших несподіваними способами - як це часто буває, коли система розробляється поступово)
Я хотів побачити, які стратегії (та інструменти) використовують інші у цьому просторі.
(Я мушу вірити, що інші можуть відчувати подібні труднощі з використанням певних технологічних наборів.))
[Оновлення: 16.12.2016: Ми закінчили інвестувати більше в паралельне тестування ІС, для обговорення результатів: http://www.mindkin.co.nz/blog/2015/12/16/16-jobs]