Как я могу указать большое количество файлов для операции слияния NCOVER?

У меня есть большой набор приемочных тестов, который запускает исходное приложение много тысяч раз, создавая отчет NCOVER для каждого запуска. После каждого теста он объединяет сгенерированный отчет о покрытии кода в большой «главный» отчет о покрытии для всего приложения.

Меня беспокоит то, что я сталкиваюсь с проблемой Shlemiel the Painter, так как операция слияния анализирует большой файл покрытия для каждого теста.

Я могу передать более одного файла покрытия в NCover.Reporting.Exe, который фактически выполняет слияние, но когда я пытаюсь передать их все сразу, я сталкиваюсь с ограничениями операционной системы на длину командной строки.

Предоставляет ли NCover.Reporting какой-то список отчетов о входном покрытии, который я могу сохранить в файл, чтобы он объединил все отчеты за один раз?


person Billy ONeal    schedule 28.07.2010    source источник


Ответы (4)


Я бы объединил 25-50 за раз, а в конце взял их и объединил вместе.

Могу я спросить, почему вы проводите каждый тест отдельно? Используете ли вы функцию включения только для инструментирования кода, который вы используете, или все ваши файлы покрытия очень большие?

Вы также можете написать в поддержку, у них может быть лучший вариант.

person joe.feser    schedule 29.07.2010
comment
Он выполняется отдельно, потому что это приемочные тесты. Фактическая тестируемая программа фактически запускается столько раз с разными входными данными. Это не модульные тесты. - person Billy ONeal; 29.07.2010
comment
Таким образом, вы не выполняете эту операцию, чтобы определить только код, выполняемый этим одним тестом, это просто характер вашей среды тестирования. Когда мы писали слияние, мы никогда не учитывали такое количество файлов покрытия. Вы пробовали использовать формат файла конфигурации? Это не должно иметь предела. - person joe.feser; 29.07.2010
comment
Похоже, что входные файлы по-прежнему необходимо указывать в командной строке, даже если используется формат файла конфигурации (на основе docs.ncover.com/ref/3-0/ncover-reporting/configuration/merging , похоже, не существует элемента XML для информирования NCover о входных файлах) - person Billy ONeal; 29.07.2010
comment
Слияние ~510 файлов покрытия (каждый размером около 20 МБ) заняло около 1 часа на нашем сервере сборки. - person Billy ONeal; 30.07.2010

@joe, проблема в том, что тебе нужно сгенерировать файл конфигурации. Теоретически он мог бы сделать это, написав небольшую вспомогательную программу, которая добавляет все файлы в КАТАЛОГ в файл конфигурации, но вам придется использовать имя каталога без файлового фильтра, т.е.

каталог покрытия myhelper.exe

НЕТ

каталог покрытия myhelper.exe*.xml

Ограничения длины командной строки являются «особенностью» DOS 1.0 и, следовательно, эмулятора, встроенного в Windows. Вы пробовали использовать powershell?

person Stephen Ward    schedule 29.07.2010
comment
Я не помню, чтобы встраивалась поддержка подстановочных знаков. Я в основном комментировал, что никогда не рассматривал вариант использования более 1000 файлов в наборе слияния. Я даже не уверен, насколько хорошо он будет работать. Мне интересно увидеть конечный результат и сколько времени это займет. Тот факт, что запущено более 1000 тестов, просто потрясающий. :) пс. приятно видеть, что вы также подписаны на ncover в твиттере. :) - person joe.feser; 29.07.2010
comment
На самом деле ограничения длины командной строки являются ограничением ядра Windows, которое использует максимальную длину строки в 32 тыс. символов. (Ограничено размером подписанного шорта) - person Billy ONeal; 29.07.2010

Мы только что обновили NCover для более эффективной обработки нескольких запусков покрытия в NCover.Console. Предполагая, что вы каждый раз запускаете одно и то же приложение, я бы удостоверился, что вы обновлены до NCover 3.4.12 и запускаете NCover.Console с параметром //coverall в сценарии, который вы используете для создания своего приложения, а не NCover каждый раз. время, когда вы запускаете свое приложение. Это создаст один объединенный XML-файл, который будет обрабатывать все для вас.

Не стесняйтесь отправить электронное письмо по адресу [email protected], и мы можем помочь вам с этим, если это необходимо. Обязательно укажите этот URL.

person commondream    schedule 29.07.2010
comment
На самом деле это не работает, потому что большая часть тестового набора фактически выполняет выходные данные нашей программы, которая создает сборки .NET. :( Нам понадобится способ указать на лету, что покрывается, и, похоже, он не предлагает этого. - person Billy ONeal; 29.07.2010
comment
Справится ли с этим флаг NCover //pn. Вы даете ему имя исполняемого файла, для которого хотите получить покрытие, и можете использовать несколько флагов //pn, если вам нужно охватить несколько исполняемых файлов: docs.ncover.com/ref/3-0/ncover-console/command-line/ - person commondream; 29.07.2010
comment
Ничего себе, этот последний комментарий не обязательно был самым ясным из общения с моей стороны. Забыл упомянуть в этом последнем комментарии, что //pn будет соответствовать подпроцессам, поэтому, если вы находитесь в более сложном дереве процессов, вы можете запустить NCover, чтобы запустить верхнюю часть дерева процессов, и //pn вызовет только нужных вам дочерних элементов. профилировать, чтобы быть профилированным. - person commondream; 29.07.2010
comment
Хорошо, давайте //pn сейчас. Как получится. Спасибо :) - person Billy ONeal; 29.07.2010

Что ж, я остановился на чем-то вроде ответа Стивена Уорда. Я поместил все файлы покрытия в каталог и запустил NCover.Reporting.exe Path\To\My\Directory\*.xml //s Merged.nccov.

Однако он не получает галочку, потому что его ответ о том, что я не могу использовать подстановочный знак в командной строке, неверен; на самом деле подстановочный знак — это единственный способ, с помощью которого NCover распознает XML-файлы в этом каталоге. Я думаю, что он привык к миру Unix (учитывая, что в его ответе был некоторый FUD Unix), где оболочка берет на себя ответственность за обработку подстановочных знаков. Оболочка Windows не пытается расширять подстановочные знаки, поэтому мы не столкнулись с ограничениями по длине.

Тем не менее, с помощью этого решения я смог сделать наши прогоны примерно на 20% быстрее, чем старый метод слияния после каждого теста, что хорошо. (Прогоны с покрытием по-прежнему в четыре раза длиннее, чем прогоны без покрытия, но нам не нужно запускать покрытие для каждого теста)

Когда я попробовал ответ commondream, к сожалению, NCover регулярно вылетал. Я не думаю, что ему нравится, что тестовая система запускает сборки .NET 1, 1.1, 2.0, 3.0, 3.5 и 4.0, а также такие вещи, как пакеты Silverlight и компактный фреймворк (Наш продукт должен корректно работать на все эти сборки). Если вам не нужно сходить с ума, запуская такие вещи, то вариант //pn, который он описывает, вероятно, будет работать нормально.

Когда я попробовал ответ joe.feser, к сожалению, мне не удалось выяснить формат файла настроек отчетов NCover. Имеется обширная документация по XML, который принимает средство создания отчетов; за исключением корневого XML-узла, который он ищет. Он отказывался распознавать какие-либо XML-файлы, которые я сгенерировал, потому что корневой узел был назван неправильно; Я предполагаю, что это проверялось на соответствие какой-то форме DTD, о которой я не знал. Если кто-то хочет опубликовать пример файла, пожалуйста.

Надеюсь, это поможет всем, у кого возникнут подобные проблемы в будущем :)

person Community    schedule 30.07.2010
comment
@Stephen Стивен Я думаю, что мы назвали эту функцию, чтобы расширить подстановочный знак. Не имея кода, commondream должен был бы это проверить. Я думаю, что это было добавлено где-то в 3.1.4. Рад слышать, что он работает с подстановочным знаком. - person joe.feser; 01.08.2010