Вопрос

Привет, в моем проекте у нас есть сотни тестовых примеров.Эти тестовые примеры являются частью процесса сборки, который запускается при каждой проверке и отправляет почту нашей группе разработчиков.Этот проект довольно масштабный и реализуется уже более пяти лет.
Сейчас у нас так много тестовых примеров , что сборка занимает больше часа .Некоторые тестовые примеры структурированы неправильно, и после их рефакторинга я смог существенно сократить время выполнения, но у нас есть сотни тестовых примеров, и рефакторинг их одного за другим кажется немного перебором.
Теперь я запускаю некоторые тестовые примеры (выполнение которых занимает очень много времени) только как часть ночной сборки, а не как часть каждой проверки.
Мне любопытно , как другим ребятам это удается .

Это было полезно?

Решение

Я полагаю, что именно в "Эффективной работе с устаревшим кодом" он сказал, что если ваш набор тестов займет больше пары минут, это слишком сильно замедлит работу разработчиков, и тестами начнут пренебрегать.Похоже, ты попадаешь в эту ловушку.

Выполняются ли ваши тестовые примеры с базой данных?Тогда это, скорее всего, ваш самый большой источник проблем с производительностью.Как правило, тестовые примеры никогда не должны выполнять ввод-вывод, если это возможно.Внедрение зависимостей может позволить вам заменить объект базы данных фиктивными объектами, которые имитируют часть вашего кода, связанную с базой данных.Это позволяет вам протестировать код не беспокоясь о том, правильно ли настроена база данных.

Я настоятельно рекомендую Эффективная работа с устаревшим кодом автор: Майкл Фезерс.Он обсуждает, как справиться со многими головными болями, с которыми вы, похоже, сталкиваетесь, без необходимости рефакторинга всего кода сразу.

Обновить:

Другой возможной помощью было бы что-то вроде NDbUnit.Я еще не использовал его широко, но он выглядит многообещающе: http://code.google.com/p/ndbunit/

Другие советы

Возможно, вы могли бы рассмотреть возможность сохранения своей базы данных Oracle, но запуска ее с RAM-диска?Он не обязательно должен быть большим, потому что он будет содержать только тестовые данные.

У нас есть около 1000 тестов, большой процент из которых взаимодействует через REST и попадает в базу данных.Общее время выполнения составляет около 8 минут.Час кажется чрезмерным, но я не знаю, что вы делаете и насколько сложны ваши тесты.

Но я думаю, что есть способ помочь вам.Мы используем TeamCity, и у него есть хорошая возможность иметь несколько агентов сборки.Что вы могли бы сделать, так это разбить свой тестовый проект на подпроекты, причем каждый подпроект будет содержать всего несколько тестов.Вы могли бы использовать категории JNunit / NUnit, чтобы разделить их.Затем вы должны настроить TeamCity таким образом, чтобы каждый агент создавал только один тип подпроекта.Таким образом, вы получите параллельное выполнение тестов.С небольшим количеством агентов (вы получаете 3 бесплатно) вы сможете уложиться в 20 минут, что может быть даже приемлемо.Если вы разместите каждый агент в виртуальной машине, вам, возможно, даже не потребуются дополнительные компьютеры, вам просто понадобится много оперативной памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top