Spec-Zone.ru › CMake 3.16

ctest(1)

  • Синтаксис
  • Описание
  • Опции
  • Сводка по меткам и подпроектам
  • Режим сборки и тестирования
  • Клиент панели мониторинга

    • Шаги клиента панели мониторинга
    • Режимы клиента панели мониторинга
    • Клиент панели мониторинга через командную строку CTest
    • Клиент панели мониторинга через скрипт CTest
  • Настройка клиента панели мониторинга

    • Шаг запуска CTest
    • Шаг обновления CTest
    • Шаг конфигурации CTest
    • Шаг сборки CTest
    • Шаг тестирования CTest
    • Шаг покрытия кода CTest
    • Шаг проверки памяти CTest
    • Шаг отправки CTest
  • Отображение в формате JSON-объекта
  • Распределение ресурсов

    • Файл спецификации ресурсов
    • Свойство групп ресурсов
    • Переменные окружения
  • См. также

Синтаксис

ctest [<options>]
ctest --build-and-test <path-to-source> <path-to-build>
      --build-generator <generator> [<options>...]
      [--build-options <opts>...] [--test-command <command> [<args>...]]
ctest {-D <dashboard> | -M <model> -T <action> | -S <script> | -SP <script>}
      [-- <dashboard-options>...]

Описание

Исполняемый файл ctest — это программа-драйвер тестов CMake. Деревья сборки, сгенерированные CMake для проектов, использующих команды enable_testing() и add_test(), поддерживают тестирование. Эта программа будет запускать тесты и сообщать результаты.

Опции

-C <cfg>, --build-config <cfg>

Выберите конфигурацию для тестирования.

Некоторые деревья построения, сгенерированные CMake, могут содержать несколько конфигураций построения в одном дереве. Этот параметр позволяет указать, какая конфигурация должна быть протестирована. Примерами конфигураций являются Debug и Release.

--progress

Включить краткий вывод прогресса тестов.

Когда вывод ctest отправляется непосредственно на терминал, прогресс выполнения набора тестов отображается путём обновления одной и той же строки, а не путём вывода сообщений начала и конца для каждого теста в новых строках. Это может значительно сократить объём вывода тестов. Сообщения об окончании тестов всё равно выводятся на своей строке для неудачных тестов, и итоговый сводный вывод также будет записан.

Этот параметр также можно включить, установив переменную среды CTEST_PROGRESS_OUTPUT.

-V,--verbose

Включить подробный вывод тестов.

Вывод тестов обычно подавляется, и отображается только сводная информация. Этот параметр покажет весь вывод тестов.

-VV,--extra-verbose

Включить более подробный вывод тестов.

Вывод тестов обычно подавляется, и отображается только сводная информация. Этот параметр покажет ещё больше вывода тестов.

--debug

Отображение более подробных внутренних компонентов CTest.

Эта функция приведет к большому объёму вывода, который в основном полезен для отладки проблем с панелью инструментов.

--output-on-failure

Вывод всего вывода программы теста, если тест должен завершиться неудачей. Этот параметр также можно включить, установив переменную среды CTEST_OUTPUT_ON_FAILURE

-F

Включить переключение.

Этот параметр позволяет CTest возобновить выполнение набора тестов, который был ранее прерван. Если прерывание не произошло, параметр -F не будет иметь никакого эффекта.

-j <jobs>, --parallel <jobs>

Выполнить тесты параллельно, используя заданное количество задач.

Этот параметр сообщает CTest выполнить тесты параллельно, используя заданное количество задач. Этот параметр также может быть задан путём установки переменной среды CTEST_PARALLEL_LEVEL.

Этот параметр может использоваться с тестовой характеристикой PROCESSORS.

См. Сводку по меткам и подпроектам.

--resource-spec-file <file>

Выполнить CTest с включённым распределением ресурсов, используя файл спецификации ресурсов, указанный в <file>.

Когда ctest выполняется как клиент панели инструментов, это устанавливает параметр ResourceSpecFile шага тестирования CTest.

--test-load <level>

При выполнении тестов параллельно (например, с -j) стараться не запускать тесты, когда они могут вызвать повышение нагрузки на ЦП выше заданного порога.

Когда ctest выполняется как клиент панели инструментов, это устанавливает параметр TestLoad шага тестирования CTest.

-Q,--quiet

Сделать CTest тихим.

Этот параметр подавит весь вывод. Файл журнала вывода всё равно будет сгенерирован, если указан --output-log. Параметры, такие как --verbose, --extra-verbose, и --debug, игнорируются, если указан --quiet.

-O <file>, --output-log <file>

Вывод в файл журнала.

Этот параметр сообщает CTest записать весь свой вывод в файл журнала <file>.

-N,--show-only[=<format>]

Отключить фактическое выполнение тестов.

Этот параметр сообщает CTest отобразить тесты, которые были бы запущены, но не запускать их фактически. Полезно в сочетании с параметрами -R и -E.

<format> может иметь следующие значения.

human

Вывод в удобочитаемом формате. Не гарантируется стабильность. Это значение по умолчанию.

json-v1

Выгрузить информацию о тесте в формате JSON. См. Модель объекта в формате JSON.

-L <regex>, --label-regex <regex>

Выполнить тесты с метками, соответствующими регулярному выражению.

Этот параметр сообщает CTest запускать только тесты, метки которых соответствуют заданному регулярному выражению.

-R <regex>, --tests-regex <regex>

Запустить тесты, соответствующие регулярному выражению.

Этот параметр сообщает CTest запускать только тесты, имена которых соответствуют заданному регулярному выражению.

-E <regex>, --exclude-regex <regex>

Исключить тесты, соответствующие регулярному выражению.

Этот параметр сообщает CTest НЕ запускать тесты, имена которых соответствуют заданному регулярному выражению.

-LE <regex>, --label-exclude <regex>

Исключить тесты с метками, соответствующими регулярному выражению.

Этот параметр сообщает CTest НЕ запускать тесты, метки которых соответствуют заданному регулярному выражению.

-FA <regex>, --fixture-exclude-any <regex>

Исключить фикстуры, соответствующие <regex>, из автоматического добавления любых тестов в набор тестов.

Если тест в наборе выполняемых тестов требует определённой фикстуры, фикстурные тесты настройки и очистки обычно добавляются в набор тестов автоматически. Этот параметр предотвращает добавление тестов настройки или очистки для фикстур, соответствующих <regex>. Обратите внимание, что всё остальное поведение фикстуры сохраняется, включая зависимости тестов и пропуска тестов, у которых фикстурные тесты настройки завершились неудачей.

-FS <regex>, --fixture-exclude-setup <regex>

То же, что и -FA, но исключаются только соответствующие тесты настройки.

-FC <regex>, --fixture-exclude-cleanup <regex>

То же, что и -FA, но исключаются только соответствующие тесты очистки.

-D <dashboard>, --dashboard <dashboard>

Выполнить тестовый сценарий панели инструментов.

Этот параметр сообщает CTest действовать как клиент CDash и выполнить тестовый сценарий панели инструментов. Все тесты <Mode><Test>, где <Mode> может быть Experimental, Nightly, и Continuous, а <Test> может быть Start, Update, Configure, Build, Test, Coverage, и Submit.

См. Клиент панели инструментов.

-D <var>:<type>=<value>

Определить переменную для режима скрипта.

Передать значения переменных в командной строке. Использовать в сочетании с -S для передачи значений переменных в скрипт панели инструментов. Парсинг аргументов -D как значений переменных выполняется только в том случае, если значение, следующее за -D, не соответствует ни одному из известных типов панели инструментов.

-M <model>, --test-model <model>

Устанавливает модель для панели инструментов.

Этот параметр сообщает CTest действовать как клиент CDash, где <model> может быть Experimental, Nightly, и Continuous. Сочетание -M и -T аналогично -D.

См. Клиент панели инструментов.

-T <action>, --test-action <action>

Устанавливает действие панели инструментов, которое нужно выполнить.

Этот параметр сообщает CTest действовать как клиент CDash и выполнить какое-либо действие, такое как start, build, test и т.д. См. Шаги клиента панели инструментов для полного списка действий. Сочетание -M и -T аналогично -D.

См. Клиент панели инструментов.

-S <script>, --script <script>

Выполнить панель инструментов для конфигурации.

Этот параметр сообщает CTest загрузить скрипт конфигурации, который задаёт ряд параметров, таких как бинарные и исходные каталоги. Затем CTest выполнит необходимые действия для создания и запуска панели инструментов. Этот параметр в основном настраивает панель инструментов и затем выполняет ctest -D с соответствующими параметрами.

См. Клиент панели инструментов.

-SP <script>, --script-new-process <script>

Выполнить панель инструментов для конфигурации.

Этот параметр выполняет те же операции, что и -S, но выполнит их в отдельном процессе. Это в первую очередь полезно в тех случаях, когда скрипт может изменять среду, и вы не хотите, чтобы изменённая среда влияла на другие -S скрипты.

См. Клиент панели инструментов.

-I [Start,End,Stride,test#,test#|Test file], --tests-information

Выполнить определённое количество тестов по номеру.

Этот параметр заставляет CTest запускать тесты, начиная с номера Start, заканчивая номером End, и увеличивая на Stride. Любые дополнительные номера после Stride рассматриваются как отдельные номера тестов. Start, End, или Stride могут быть пустыми. Дополнительно может быть передан файл, содержащий тот же синтаксис, что и в командной строке.

-U, --union

Взять объединение -I и -R.

Когда оба -R и -I указаны, по умолчанию выполняется пересечение тестов. Указывая -U, выполняется объединение тестов вместо этого.

--rerun-failed

Запустить только те тесты, которые завершились неудачей ранее.

Этот параметр сообщает CTest выполнить только те тесты, которые завершились неудачей во время предыдущего выполнения. При указании этого параметра CTest игнорирует все остальные параметры, предназначенные для изменения списка запускаемых тестов (-L, -R, -E, -LE, -I, и т.д.). Если CTest выполняется и ни один тест не завершается неудачей, последующие вызовы CTest с параметром --rerun-failed будут выполнять набор тестов, который в последний раз завершился неудачей (если таковые имеются).

--repeat-until-fail <n>

Требовать, чтобы каждый тест выполнялся <n> раз без ошибок, чтобы пройти.

Это полезно для поиска спорадических ошибок в тестовых случаях.

--max-width <width>

Установить максимальную ширину имени теста для вывода.

Установить максимальную ширину каждого имени теста для отображения в выводе. Это позволяет пользователю расширить вывод, чтобы избежать обрезания имени теста, что может быть очень раздражающим.

--interactive-debug-mode [0|1]

Установите интерактивный режим в 0 или 1.

Этот параметр заставляет CTest запускать тесты в интерактивном или неинтерактивном режиме. В Windows это означает, что в неинтерактивном режиме все всплывающие окна отладки системы блокируются. В режиме панели мониторинга (Experimental, Nightly, Continuous ) по умолчанию используется неинтерактивный режим. При простом запуске тестов, не для панели мониторинга, по умолчанию разрешаются всплывающие окна и интерактивная отладка.

--no-label-summary

Отключить сводку по времени для меток.

Этот параметр указывает CTest не выводить сводку по времени для каждой метки, связанной с запущенными тестами. Если тесты не имеют меток, дополнительная информация не выводится.

См. Сводку по меткам и подпроектам.

--no-subproject-summary

Отключить сводку по времени для подпроектов.

Этот параметр указывает CTest не выводить сводку по времени для каждого подпроекта, связанного с запущенными тестами. Если тесты не имеют подпроектов, дополнительная информация не выводится.

См. Сводку по меткам и подпроектам.

--build-and-test См. Режим сборки и тестирования.

--test-output-size-passed <size>

Ограничить вывод для пройденных тестов до <size> байт.

--test-output-size-failed <size>

Ограничить вывод для проваленных тестов до <size> байт.

--overwrite

Перезаписать параметр конфигурации CTest.

По умолчанию CTest использует параметры конфигурации из файла конфигурации. Этот параметр перезапишет параметр конфигурации.

--force-new-ctest-process

Запускать дочерние экземпляры CTest как новые процессы.

По умолчанию CTest будет запускать дочерние экземпляры CTest в рамках одного процесса. Если это поведение нежелательно, этот аргумент принудительно запустит дочерние процессы CTest в новых процессах.

--schedule-random

Использовать случайный порядок для планирования тестов.

Этот параметр запустит тесты в случайном порядке. Он часто используется для обнаружения неявных зависимостей в наборе тестов.

--submit-index

Запись параметра для старой функции сервера панели мониторинга Dart2. Не использовать.

--timeout <seconds>

Установить значение таймаута по умолчанию для тестов.

Этот параметр фактически устанавливает таймаут для всех тестов, которые не имеют установленного таймаута с помощью свойства TIMEOUT.

--stop-time <time>

Установить время, когда все тесты должны быть остановлены.

Установите реальное время суток, когда все тесты должны истечь. Пример: 7:00:00 -0400. Любой формат времени, понятный парсеру даты curl, принимается. Если часовой пояс не указан, предполагается местное время.

--print-labels

Вывести все доступные метки тестов.

Этот параметр не запустит тесты, он просто выведет список всех меток, связанных с набором тестов.

--help,-help,-usage,-h,-H,/?

Вывести информацию об использовании и выйти.

Информация об использовании описывает основные команды командной строки и их параметры.

--version,-version,/V [<f>]

Показать баннер с именем/версией программы и выйти.

Если файл указан, версия записывается в него. Справка выводится в указанный файл <f>айл, если он задан.

--help-full [<f>]

Вывести все руководства справки и выйти.

Все руководства выводятся в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-manual <man> [<f>]

Вывести одно руководство справки и выйти.

Указанное руководство выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-manual-list [<f>]

Вывести список доступных руководств справки и выйти.

Список содержит все руководства, справка по которым может быть получена с помощью параметра --help-manual, после которого следует имя руководства. Справка выводится в указанный файл <f>айл, если он задан.

--help-command <cmd> [<f>]

Вывести справку по одной команде и выйти.

Запись справки в руководстве cmake-commands(7) для <cmd> выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-command-list [<f>]

Вывести список команд со справкой и выйти.

Список содержит все команды, справка по которым может быть получена с помощью параметра --help-command , после которого следует имя команды. Справка выводится в указанный файл <f>айл, если он задан.

--help-commands [<f>]

Вывести руководство справки cmake-commands и выйти.

Руководство справки cmake-commands(7) выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-module <mod> [<f>]

Вывести справку по одному модулю и выйти.

Запись справки в руководстве cmake-modules(7) для <mod> выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-module-list [<f>]

Вывести список модулей со справкой и выйти.

Список содержит все модули, справка по которым может быть получена с помощью параметра --help-module , после которого следует имя модуля. Справка выводится в указанный файл <f>айл, если он задан.

--help-modules [<f>]

Вывести руководство справки cmake-modules и выйти.

Руководство справки cmake-modules(7) выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-policy <cmp> [<f>]

Вывести справку по одному политике и выйти.

Запись справки в руководстве cmake-policies(7) для <cmp> выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-policy-list [<f>]

Вывести список политик со справкой и выйти.

Список содержит все политики, справка по которым может быть получена с помощью параметра --help-policy , после которого следует имя политики. Справка выводится в указанный файл <f>айл, если он задан.

--help-policies [<f>]

Вывести руководство справки cmake-policies и выйти.

Руководство справки cmake-policies(7) выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-property <prop> [<f>]

Вывести справку по одному свойству и выйти.

Записи справки в руководстве cmake-properties(7) для <prop> выводятся в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-property-list [<f>]

Вывести список свойств со справкой и выйти.

Список содержит все свойства, справка по которым может быть получена с помощью параметра --help-property , после которого следует имя свойства. Справка выводится в указанный файл <f>айл, если он задан.

--help-properties [<f>]

Вывести руководство справки cmake-properties и выйти.

Руководство справки cmake-properties(7) выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-variable <var> [<f>]

Вывести справку по одной переменной и выйти.

Запись справки в руководстве cmake-variables(7) для <var> выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

--help-variable-list [<f>]

Вывести список переменных со справкой и выйти.

Список содержит все переменные, справка по которым может быть получена с помощью параметра --help-variable , после которого следует имя переменной. Справка выводится в указанный файл <f>айл, если он задан.

--help-variables [<f>]

Вывести руководство справки cmake-variables и выйти.

Руководство справки cmake-variables(7) выводится в удобочитаемом текстовом формате. Справка выводится в указанный файл <f>айл, если он задан.

Сводка по меткам и подпроектам

CTest выводит сводку по времени для каждой LABEL и подпроекта, связанного с запущенными тестами. Сводка по времени для меток не будет включать метки, сопоставленные с подпроектами.

Когда свойство теста PROCESSORS установлено, CTest отобразит взвешенное время выполнения тестов в сводках по меткам и подпроектам. Время отображается с использованием sec*proc вместо просто sec.

Взвешенная сводка по времени, отображаемая для каждой метки или подпроекта j, вычисляется как:

Weighted Time Summary for Label/Subproject j =
    sum(raw_test_time[j,i] * num_processors[j,i], i=1...num_tests[j])

for labels/subprojects j=1...total

где:

  • raw_test_time[j,i]: Время выполнения для i теста для j метки или подпроекта
  • num_processors[j,i]: Значение свойства CTest PROCESSORS для i теста для j метки или подпроекта
  • num_tests[j]: Количество тестов, связанных с j меткой или подпроектом
  • total: Общее количество меток или подпроектов, имеющих хотя бы один запущенный тест

Таким образом, взвешенная сводка по времени для каждой метки или подпроекта представляет собой время, которое CTest потратил на выполнение тестов для каждой метки или подпроекта, и дает хорошее представление о общих затратах на тесты для каждой метки или подпроекта по сравнению с другими метками или подпроектами.

Например, если SubprojectA показало 100 sec*proc и SubprojectB показало 10 sec*proc, тогда CTest выделил примерно в 10 раз больше времени процессора на ядро для запуска тестов SubprojectA по сравнению с SubprojectB (например, если усилия будут направлены на снижение стоимости набора тестов для всего проекта, то снижение стоимости набора тестов для SubprojectA, скорее всего, окажет большее влияние, чем усилия по снижению стоимости набора тестов для SubprojectB).

Режим сборки и тестирования

CTest предоставляет командную строку для настройки (т.е. запуска cmake), сборки и/или выполнения теста:

ctest --build-and-test <path-to-source> <path-to-build>
      --build-generator <generator>
      [<options>...]
      [--build-options <opts>...]
      [--test-command <command> [<args>...]]

Шаги настройки и тестирования являются необязательными. Аргументами этой командной строки являются каталоги исходных и двоичных файлов. Необходимо указать опцию --build-generator, чтобы использовать --build-and-test. Если указана опция --test-command, она будет запущена после завершения сборки. Другие опции, которые влияют на этот режим, включают:

--build-target

Указывает конкретную цель для сборки.

Если не указана, собирается цель all.

--build-nocmake

Запустить сборку без предварительного запуска cmake.

Пропустить шаг cmake.

--build-run-dir

Указать каталог для запуска программ.

Каталог, в котором будут программы после компиляции.

--build-two-config

Запустить CMake дважды.

--build-exe-dir

Указать каталог для исполняемого файла.

--build-generator

Указать генератор для использования. См. руководство cmake-generators(7).

--build-generator-platform

Указать платформу, специфичную для генератора.

--build-generator-toolset

Указать набор инструментов, специфичный для генератора.

--build-project

Указать имя проекта для сборки.

--build-makeprogram

Указать явный инструмент make, который будет использоваться CMake при настройке и сборке проекта. Применимо только для генераторов на основе Make и Ninja.

--build-noclean

Пропустить шаг make clean.

--build-config-sample

Пример исполняемого файла для определения конфигурации, которая должна быть использована. Например, Debug, Release и т.д.

--build-options

Дополнительные параметры для настройки сборки (т.е. для CMake, а не для инструмента сборки). Обратите внимание, что если это указано, то ключевое слово --build-options и его аргументы должны быть последними параметрами, заданными в командной строке, за исключением, возможно, --test-command.

--test-command

Команда для запуска как этапа тестирования с параметром --build-and-test. Все аргументы, следующие за этим ключевым словом, будут считаться частью командной строки теста, поэтому она должна быть последней опцией.

--test-timeout

Предел времени в секундах

Клиент панели управления

CTest может работать как клиент для приложения панели управления качеством программного обеспечения CDash. В качестве клиента панели управления CTest выполняет последовательность шагов для настройки, сборки и тестирования программного обеспечения, а затем отправляет результаты на сервер CDash. Командная строка, используемая для отправки на CDash, имеет вид:

ctest (-D <dashboard> | -M <model> -T <action> | -S <script> | -SP <script>)
      [-- <dashboard-options>...]

Опции для клиента панели управления включают:

--group <group>

Указывает, в какую группу вы хотите отправить результаты

Отправить панель управления в указанную группу вместо стандартной. По умолчанию панель управления отправляется в группу Nightly, Experimental или Continuous, но указав эту опцию, группа может быть произвольной.

Заменяет устаревшую опцию --track. Несмотря на смену названия, ее поведение не меняется.

-A <file>, --add-notes <file>

Добавить файл заметок к отправке.

Эта опция указывает CTest включить файл заметок при отправке панели управления.

--tomorrow-tag

Nightly или Experimental начинается с тега следующего дня.

Это полезно, если сборка не завершится за один день.

--extra-submit <file>[;<file>]

Отправить дополнительные файлы на панель управления.

Эта опция отправит дополнительные файлы на панель управления.

--http1.0

Отправить, используя HTTP 1.0.

Эта опция заставит CTest использовать HTTP 1.0 для отправки файлов на панель управления вместо HTTP 1.1.

--no-compress-output

Не сжимать вывод тестов при отправке.

Этот флаг отключит автоматическое сжатие вывода тестов. Используйте его для поддержания совместимости со старой версией CDash, которая не поддерживает сжатый вывод тестов.

Шаги клиента панели управления

CTest определяет упорядоченный список шагов тестирования, некоторые или все из которых могут быть выполнены как клиентом панели управления:

Start

Начать новую отправку на панель управления, которая будет состоять из результатов, записанных последующими шагами. См. раздел Начальный шаг CTest ниже.

Update

Обновить дерево исходных файлов из системы управления версиями. Записать старые и новые версии, а также список обновленных исходных файлов. См. раздел Шаг обновления CTest ниже.

Configure

Настроить программное обеспечение, выполнив команду в дереве сборки. Записать журнал конфигурации. См. раздел Шаг конфигурации CTest ниже.

Build

Собрать программное обеспечение, выполнив команду в дереве сборки. Записать журнал сборки и обнаружить предупреждения и ошибки. См. раздел Шаг сборки CTest ниже.

Test

Протестировать программное обеспечение, загрузив CTestTestfile.cmake из дерева сборки и выполнив определенные тесты. Записать вывод и результат каждого теста. См. раздел Шаг тестирования CTest ниже.

Coverage

Вычислить покрытие исходного кода, запустив инструмент анализа покрытия и записав его вывод. См. раздел Шаг покрытия CTest ниже.

MemCheck

Проверить программное обеспечение на ошибки памяти, запустив инструмент проверки памяти. Записать вывод теста, результаты и проблемы, сообщения об ошибках инструмента. См. раздел Шаг CTest MemCheck ниже.

Submit

Отправить результаты, записанные от других шагов тестирования, на сервер панели управления качеством программного обеспечения. См. раздел Шаг отправки CTest ниже.

Режимы работы клиента панели управления

CTest определяет три режима работы в качестве клиента панели управления:

Nightly

Этот режим предназначен для вызова один раз в день, обычно ночью. Он включает шаги Start, Update, Configure, Build, Test, Coverage, и Submit по умолчанию. Выбранные шаги выполняются, даже если шаг Update не сообщает о каких-либо изменениях в дереве исходных файлов.

Continuous

Этот режим предназначен для многократного вызова в течение дня. Он включает шаги Start, Update, Configure, Build, Test, Coverage, и Submit по умолчанию, но завершается после шага Update, если он не сообщает о каких-либо изменениях в дереве исходных файлов.

Experimental

Этот режим предназначен для использования разработчиком для тестирования локальных изменений. Он включает шаги Start, Configure, Build, Test, Coverage, и Submit по умолчанию.

Клиент панели управления через командную строку CTest

CTest может выполнять тестирование в уже сгенерированном дереве сборки. Запустите команду ctest с текущим рабочим каталогом, установленным в дереве сборки, и используйте одну из этих схем:

ctest -D <mode>[<step>]
ctest -M <mode> [ -T <step> ]...

<mode> должен быть одним из вышеперечисленных Режимов работы клиента панели управления, а каждый <step> должен быть одним из вышеперечисленных Шагов клиента панели управления.

CTest считывает настройки Конфигурации клиента панели управления из файла в дереве сборки, называемого либо CTestConfiguration.ini, либо DartConfiguration.tcl (названия носят исторический характер). Формат файла:

# Lines starting in '#' are comments.
# Other non-blank lines are key-value pairs.
<setting>: <value>

где <setting> — имя настройки, а <value> — значение настройки.

В деревьях сборки, сгенерированных CMake, этот файл конфигурации генерируется модулем CTest, если он включен в проект. Модуль использует переменные для получения значения каждой настройки, как описано ниже.

Клиент панели управления через скрипт CTest

CTest может выполнять тестирование, управляемое скриптом cmake-language(7), который создает и поддерживает дерево исходных и бинарных файлов, а также выполняет шаги тестирования. Запустите команду ctest с текущим рабочим каталогом вне любого дерева сборки и используйте одну из этих схем:

ctest -S <script>
ctest -SP <script>

Файл <script> должен вызывать команды Команд CTest для явного выполнения шагов тестирования, как описано ниже. Команды получают настройки Конфигурации клиента панели управления из их аргументов или из переменных, заданных в скрипте.

Конфигурация клиента панели управления

Шаги клиента панели управления можно настроить с помощью именованных настроек, как описано в следующих разделах.

Начальный шаг CTest

Начать новую отправку на панель управления, которая будет состоять из результатов, записанных последующими шагами.

В скрипте CTest, команда ctest_start() выполняет этот шаг. Аргументы команды могут указать некоторые настройки шага. Команда сначала выполняет заданную в командной строке команду, если она задана, через переменную CTEST_CHECKOUT_COMMAND, для инициализации исходного каталога.

Настройки конфигурации включают:

BuildDirectory

Полный путь к дереву сборки проекта.

  • Переменная скрипта CTest: CTEST_BINARY_DIRECTORY
  • Переменная модуля CTest: PROJECT_BINARY_DIR
SourceDirectory

Полный путь к дереву исходного кода проекта.

  • Переменная скрипта CTest: CTEST_SOURCE_DIRECTORY
  • Переменная модуля CTest: PROJECT_SOURCE_DIR

Шаг обновления CTest

В скрипте CTest, команда ctest_update() выполняет этот шаг. Аргументы команды могут указать некоторые настройки шага.

Настройки конфигурации для указания инструмента контроля версий включают:

BZRCommand

bzr командная утилита для использования, если исходное дерево управляется Bazaar.

  • Скрипт CTest переменная: CTEST_BZR_COMMAND
  • CTest модульная переменная: none
BZRUpdateOptions

Командная строка параметров для BZRCommand при обновлении исходного кода.

  • Скрипт CTest переменная: CTEST_BZR_UPDATE_OPTIONS
  • CTest модульная переменная: none
CVSCommand

cvs командная утилита для использования, если исходное дерево управляется CVS.

  • Скрипт CTest переменная: CTEST_CVS_COMMAND
  • CTest модульная переменная: CVSCOMMAND
CVSUpdateOptions

Командная строка параметров для CVSCommand при обновлении исходного кода.

  • Скрипт CTest переменная: CTEST_CVS_UPDATE_OPTIONS
  • CTest модульная переменная: CVS_UPDATE_OPTIONS
GITCommand

git командная утилита для использования, если исходное дерево управляется Git.

  • Скрипт CTest переменная: CTEST_GIT_COMMAND
  • CTest модульная переменная: GITCOMMAND

Исходное дерево обновляется с помощью git fetch, за которым следует git reset --hard до FETCH_HEAD. Результат такой же, как у git pull, за исключением того, что любые локальные изменения перезаписываются. Используйте GITUpdateCustom, чтобы указать другой подход.

GITInitSubmodules

Если установлено, CTest обновит подмодули репозитория перед обновлением.

  • Скрипт CTest переменная: CTEST_GIT_INIT_SUBMODULES
  • CTest модульная переменная: CTEST_GIT_INIT_SUBMODULES
GITUpdateCustom

Укажите пользовательскую командную строку (в виде списка, разделенного точкой с запятой), которая будет выполнена в исходном дереве (рабочей области Git), чтобы обновить его вместо запуска GITCommand.

  • Скрипт CTest переменная: CTEST_GIT_UPDATE_CUSTOM
  • CTest модульная переменная: CTEST_GIT_UPDATE_CUSTOM
GITUpdateOptions

Командная строка параметров для GITCommand при обновлении исходного кода.

  • Скрипт CTest переменная: CTEST_GIT_UPDATE_OPTIONS
  • CTest модульная переменная: GIT_UPDATE_OPTIONS
HGCommand

hg командная утилита для использования, если исходное дерево управляется Mercurial.

  • Скрипт CTest переменная: CTEST_HG_COMMAND
  • CTest модульная переменная: none
HGUpdateOptions

Командная строка параметров для HGCommand при обновлении исходного кода.

  • Скрипт CTest переменная: CTEST_HG_UPDATE_OPTIONS
  • CTest модульная переменная: none
P4Client

Значение параметра -c для P4Command.

  • Скрипт CTest переменная: CTEST_P4_CLIENT
  • CTest модульная переменная: CTEST_P4_CLIENT
P4Command

p4 командная утилита для использования, если исходное дерево управляется Perforce.

  • Скрипт CTest переменная: CTEST_P4_COMMAND
  • CTest модульная переменная: P4COMMAND
P4Options

Командная строка параметров для P4Command для всех вызовов.

  • Скрипт CTest переменная: CTEST_P4_OPTIONS
  • CTest модульная переменная: CTEST_P4_OPTIONS
P4UpdateCustom

Укажите пользовательскую командную строку (в виде списка, разделенного точкой с запятой), которая будет выполнена в исходном дереве (дереве Perforce), чтобы обновить его вместо запуска P4Command.

  • Скрипт CTest переменная: none
  • CTest модульная переменная: CTEST_P4_UPDATE_CUSTOM
P4UpdateOptions

Командная строка параметров для P4Command при обновлении исходного кода.

  • Скрипт CTest переменная: CTEST_P4_UPDATE_OPTIONS
  • CTest модульная переменная: CTEST_P4_UPDATE_OPTIONS
SVNCommand

svn командная утилита для использования, если исходное дерево управляется Subversion.

  • Скрипт CTest переменная: CTEST_SVN_COMMAND
  • CTest модульная переменная: SVNCOMMAND
SVNOptions

Командная строка параметров для SVNCommand для всех вызовов.

  • Скрипт CTest переменная: CTEST_SVN_OPTIONS
  • CTest модульная переменная: CTEST_SVN_OPTIONS
SVNUpdateOptions

Командная строка параметров для SVNCommand при обновлении исходного кода.

  • Скрипт CTest переменная: CTEST_SVN_UPDATE_OPTIONS
  • CTest модульная переменная: SVN_UPDATE_OPTIONS
UpdateCommand

Укажите инструмент командной строки для управления версиями, не определяя систему управления версиями (VCS), которая управляет деревом исходных кодов.

  • Скрипт CTest переменная: CTEST_UPDATE_COMMAND
  • CTest модульная переменная: <VCS>COMMAND когда UPDATE_TYPE равно <vcs>, иначе UPDATE_COMMAND
UpdateOptions

Опции командной строки для UpdateCommand.

  • Скрипт CTest переменная: CTEST_UPDATE_OPTIONS
  • CTest модульная переменная: <VCS>_UPDATE_OPTIONS когда UPDATE_TYPE равно <vcs>, иначе UPDATE_OPTIONS
UpdateType

Укажите систему управления версиями, которая управляет деревом исходного кода, если ее нельзя автоматически обнаружить. Значение может быть bzr, cvs, git, hg, p4, или svn.

  • Скрипт CTest переменная: нет, определяется из дерева исходного кода
  • CTest модульная переменная: UPDATE_TYPE если установлено, иначе CTEST_UPDATE_TYPE
UpdateVersionOnly

Укажите, что вы хотите, чтобы команда обновления системы управления версиями обнаружила только текущую версию, которая выбрана, а не обновлялась до другой версии.

  • Скрипт CTest переменная: CTEST_UPDATE_VERSION_ONLY
UpdateVersionOverride

Укажите текущую версию вашего дерева исходного кода.

Когда эта переменная установлена в непустую строку, CTest сообщит значение, которое вы указали, а не будет использовать команду обновления для поиска текущей выбранной версии. Использование этой переменной заменяет UpdateVersionOnly. Как и UpdateVersionOnly, использование этой переменной сообщает CTest, что он не должен обновлять дерево исходного кода до другой версии.

  • Скрипт CTest переменная: CTEST_UPDATE_VERSION_OVERRIDE

Дополнительные параметры конфигурации включают:

NightlyStartTime

В режиме панели мониторинга Nightly, укажите «время начала ночных сборок». В централизованных системах управления версиями (cvs и svn) этап Update выбирает версию программного обеспечения на эту дату и время, чтобы несколько клиентов выбрали общую версию для тестирования. В распределенных системах управления версиями это не определено, поэтому настройка игнорируется.

  • Скрипт CTest переменная: CTEST_NIGHTLY_START_TIME
  • CTest модульная переменная: NIGHTLY_START_TIME если установлено, иначе CTEST_NIGHTLY_START_TIME

Шаг конфигурации CTest

В скрипте CTest команда ctest_configure() выполняет этот шаг. Аргументы команды могут указать некоторые из параметров шага.

Параметры конфигурации включают:

ConfigureCommand

Командная строка для запуска процесса конфигурации программного обеспечения. Она будет выполнена в расположении, указанном настройкой BuildDirectory.

  • Скрипт CTest переменная: CTEST_CONFIGURE_COMMAND
  • CTest модульная переменная: CMAKE_COMMAND за которым следует PROJECT_SOURCE_DIR
LabelsForSubprojects

Укажите список меток, разделенных точкой с запятой, которые будут рассматриваться как подпроекты. Это отображение будет передано в CDash при отправке результатов конфигурации, тестирования или сборки.

  • Скрипт CTest переменная: CTEST_LABELS_FOR_SUBPROJECTS
  • CTest модульная переменная: CTEST_LABELS_FOR_SUBPROJECTS

См. Сводку меток и подпроектов.

Шаг сборки CTest

В скрипте CTest команда ctest_build() выполняет этот шаг. Аргументы команды могут указать некоторые из параметров шага.

Параметры конфигурации включают:

DefaultCTestConfigurationType

Если система сборки позволяет выбрать конфигурацию на этапе сборки (например, Debug, Release), это указывает на стандартную конфигурацию для сборки, когда параметр -C не задан команде ctest. Значение будет подставлено в значение MakeCommand, заменив литеральную строку ${CTEST_CONFIGURATION_TYPE}, если она встречается.

  • Скрипт CTest переменная: CTEST_CONFIGURATION_TYPE
  • CTest модульная переменная: DEFAULT_CTEST_CONFIGURATION_TYPE, инициализированная переменной среды CMAKE_CONFIG_TYPE
LabelsForSubprojects

Укажите список меток, разделенных точкой с запятой, которые будут рассматриваться как подпроекты. Это отображение будет передано в CDash при отправке результатов конфигурации, тестирования или сборки.

  • Скрипт CTest переменная: CTEST_LABELS_FOR_SUBPROJECTS
  • CTest модульная переменная: CTEST_LABELS_FOR_SUBPROJECTS

См. Сводку меток и подпроектов.

MakeCommand

Командная строка для запуска процесса сборки программного обеспечения. Она будет выполнена в расположении, указанном настройкой BuildDirectory.

  • Скрипт CTest переменная: CTEST_BUILD_COMMAND
  • CTest модульная переменная: MAKECOMMAND, инициализированная командой build_command()
UseLaunchers

Для деревьев сборки, сгенерированных CMake с использованием одного из Генераторов Makefile или генератора Ninja, укажите, включена ли функция CTEST_USE_LAUNCHERS, используемая модулем CTestUseLaunchers (также включённым в модуль CTest). При включении сгенерированная система сборки обернёт каждый вызов компилятора, компоновщика или пользовательской командной строки «загрузчиком», который взаимодействует с CTest через переменные окружения и файлы для отчёта о детальных предупреждениях и ошибках сборки. В противном случае CTest должен «извлечь» диагностику из журнала вывода сборки.

  • Скрипт CTest переменная: CTEST_USE_LAUNCHERS
  • CTest модульная переменная: CTEST_USE_LAUNCHERS

Шаг тестирования CTest

В скрипте CTest, команда ctest_test() выполняет этот шаг. Аргументы команды могут задать некоторые настройки шага.

Настройки конфигурации включают:

ResourceSpecFile

Укажите файл спецификации ресурсов файл спецификации ресурсов. Дополнительную информацию см. в разделе Распределение ресурсов.

LabelsForSubprojects

Укажите список меток, разделённых точкой с запятой, которые будут обрабатываться как подпроекты. Это отображение будет передано в CDash при отправке результатов конфигурации, тестирования или сборки.

  • Переменная скрипта CTest: CTEST_LABELS_FOR_SUBPROJECTS
  • Переменная модуля CTest: CTEST_LABELS_FOR_SUBPROJECTS

См. Резюме меток и подпроектов.

TestLoad

Во время параллельного выполнения тестов (например, с -j), старайтесь не запускать тесты, которые могут привести к превышению заданного порога нагрузки процессора.

  • Переменная скрипта CTest: CTEST_TEST_LOAD
  • Переменная модуля CTest: CTEST_TEST_LOAD
TimeOut

Стандартный таймаут для каждого теста, если не указан свойством теста TIMEOUT.

  • Переменная скрипта CTest: CTEST_TEST_TIMEOUT
  • Переменная модуля CTest: DART_TESTING_TIMEOUT

Шаг CTest Coverage

В скрипте CTest, команда ctest_coverage() выполняет этот шаг. Аргументы команды могут задать некоторые настройки шага.

Настройки конфигурации включают:

CoverageCommand

Инструмент командной строки для анализа покрытия ПО. Он будет выполняться в месте, указанном параметром BuildDirectory.

  • Переменная скрипта CTest: CTEST_COVERAGE_COMMAND
  • Переменная модуля CTest: COVERAGE_COMMAND
CoverageExtraFlags

Укажите параметры командной строки для инструмента CoverageCommand.

  • Переменная скрипта CTest: CTEST_COVERAGE_EXTRA_FLAGS
  • Переменная модуля CTest: COVERAGE_EXTRA_FLAGS

Эти параметры являются первыми аргументами, передаваемыми инструменту CoverageCommand.

Шаг CTest MemCheck

В скрипте CTest, команда ctest_memcheck() выполняет этот шаг. Аргументы команды могут задать некоторые настройки шага.

Настройки конфигурации включают:

MemoryCheckCommand

Инструмент командной строки для динамического анализа. Команды тестов будут запускаться через этот инструмент.

  • Переменная скрипта CTest: CTEST_MEMORYCHECK_COMMAND
  • Переменная модуля CTest: MEMORYCHECK_COMMAND
MemoryCheckCommandOptions

Укажите параметры командной строки для инструмента MemoryCheckCommand. Они будут размещены перед командой теста.

  • Переменная скрипта CTest: CTEST_MEMORYCHECK_COMMAND_OPTIONS
  • Переменная модуля CTest: MEMORYCHECK_COMMAND_OPTIONS
MemoryCheckType

Укажите тип проверки памяти.

  • Переменная скрипта CTest: CTEST_MEMORYCHECK_TYPE
  • Переменная модуля CTest: MEMORYCHECK_TYPE
MemoryCheckSanitizerOptions

Укажите параметры для сантайзеров при запуске со сборкой, поддерживающей сантайзеры.

  • Переменная скрипта CTest: CTEST_MEMORYCHECK_SANITIZER_OPTIONS
  • Переменная модуля CTest: MEMORYCHECK_SANITIZER_OPTIONS
MemoryCheckSuppressionFile

Укажите файл с правилами подавления для инструмента MemoryCheckCommand. Он будет передан с параметрами, соответствующими инструменту.

  • Переменная скрипта CTest: CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
  • Переменная модуля CTest: MEMORYCHECK_SUPPRESSIONS_FILE
BoundsCheckerCommand

Укажите MemoryCheckCommand, совместимый с командной строкой Bounds Checker.

  • Переменная скрипта CTest: none
  • Переменная модуля CTest: none
PurifyCommand

Укажите MemoryCheckCommand, совместимый с командной строкой Purify.

  • Переменная скрипта CTest: none
  • Переменная модуля CTest: PURIFYCOMMAND
ValgrindCommand

Укажите MemoryCheckCommand, совместимый с командной строкой Valgrind.

  • Переменная скрипта CTest: none
  • Переменная модуля CTest: VALGRIND_COMMAND
ValgrindCommandOptions

Укажите параметры командной строки для инструмента ValgrindCommand. Они будут помещены перед командной строкой теста.

  • Переменная скрипта CTest: none
  • Переменная модуля CTest: VALGRIND_COMMAND_OPTIONS

Шаг CTest Submit

В скрипте CTest, команда ctest_submit() выполняет этот шаг. Аргументы команды могут задать некоторые настройки шага.

Настройки конфигурации включают:

BuildName

Опишите платформу клиента панели мониторинга с помощью короткой строки. (Операционная система, компилятор и т. д.)

  • Сценарий CTest переменная: CTEST_BUILD_NAME
  • CTest модульная переменная: BUILDNAME
CDashVersion

Устаревшая опция. Не используется.

  • Сценарий CTest переменная: нет, определяется из сервера
  • CTest модульная переменная: CTEST_CDASH_VERSION
CTestSubmitRetryCount

Укажите количество попыток повторной отправки при сбое сети.

  • Сценарий CTest переменная: нет, используйте опцию ctest_submit() RETRY_COUNT.
  • CTest модульная переменная: CTEST_SUBMIT_RETRY_COUNT
CTestSubmitRetryDelay

Укажите задержку перед повторной отправкой при сбое сети.

  • Сценарий CTest переменная: нет, используйте опцию ctest_submit() RETRY_DELAY.
  • CTest модульная переменная: CTEST_SUBMIT_RETRY_DELAY
CurlOptions

Укажите список опций, разделённых точкой с запятой, для управления библиотекой Curl, которую CTest использует для подключения к серверу. Возможные опции — CURLOPT_SSL_VERIFYPEER_OFF и CURLOPT_SSL_VERIFYHOST_OFF.

  • Сценарий CTest переменная: CTEST_CURL_OPTIONS
  • CTest модульная переменная: CTEST_CURL_OPTIONS
DropLocation

Устаревшая опция. Если SubmitURL не задано, оно строится из DropMethod, DropSiteUser, DropSitePassword, DropSite, и DropLocation.

  • Сценарий CTest переменная: CTEST_DROP_LOCATION
  • CTest модульная переменная: DROP_LOCATION, если задано, иначе CTEST_DROP_LOCATION
DropMethod

Устаревшая опция. Если SubmitURL не задано, оно строится из DropMethod, DropSiteUser, DropSitePassword, DropSite, и DropLocation.

  • Сценарий CTest переменная: CTEST_DROP_METHOD
  • CTest модульная переменная: DROP_METHOD, если задано, иначе CTEST_DROP_METHOD
DropSite

Устаревшая опция. Если SubmitURL не задано, оно строится из DropMethod, DropSiteUser, DropSitePassword, DropSite, и DropLocation.

  • Сценарий CTest переменная: CTEST_DROP_SITE
  • CTest модульная переменная: DROP_SITE, если задано, иначе CTEST_DROP_SITE
DropSitePassword

Устаревшая опция. Если SubmitURL не задано, оно строится из DropMethod, DropSiteUser, DropSitePassword, DropSite, и DropLocation.

  • Сценарий CTest переменная: CTEST_DROP_SITE_PASSWORD
  • CTest модульная переменная: DROP_SITE_PASSWORD, если задано, иначе CTEST_DROP_SITE_PASWORD
DropSiteUser

Устаревшая опция. Если SubmitURL не задано, оно строится из DropMethod, DropSiteUser, DropSitePassword, DropSite, и DropLocation.

  • Сценарий CTest переменная: CTEST_DROP_SITE_USER
  • CTest модульная переменная: DROP_SITE_USER, если задано, иначе CTEST_DROP_SITE_USER
IsCDash

Устаревшая опция. Не используется.

  • Сценарий CTest переменная: CTEST_DROP_SITE_CDASH
  • CTest модульная переменная: CTEST_DROP_SITE_CDASH
ScpCommand

Устаревшая опция. Не используется.

  • Сценарий CTest переменная: CTEST_SCP_COMMAND
  • CTest модульная переменная: SCPCOMMAND
Site

Опишите хост-сайт клиента панели мониторинга короткой строкой. (Имя хоста, домен и т. д.)

  • Сценарий CTest переменная: CTEST_SITE
  • CTest модульная переменная: SITE, инициализируется командой site_name()
SubmitURL

URL сервера панели мониторинга (http или https) для отправки результата.

  • Сценарий CTest переменная: CTEST_SUBMIT_URL
  • CTest модульная переменная: SUBMIT_URL, если задано, иначе CTEST_SUBMIT_URL
TriggerSite

Устаревшая опция. Не используется.

  • Сценарий CTest переменная: CTEST_TRIGGER_SITE
  • CTest модульная переменная: TRIGGER_SITE, если задано, иначе CTEST_TRIGGER_SITE

Отобразить как JSON-объектную модель

Когда используется опция командной строки --show-only=json-v1, информация о тесте выводится в формате JSON. Версия 1.0 модели JSON-объекта определена следующим образом:

kind

Строка “ctestInfo”.

version

Объект JSON, определяющий компоненты версии. Его члены:

major

Целое неотрицательное число, определяющее главный компонент версии.

minor

Целое неотрицательное число, определяющее второстепенный компонент версии.

backtraceGraph

Объект JSON, представляющий информацию о трассировке стека с последующими членами:

commands

Список имён команд.

files

Список имён файлов.

nodes

Список узлов в формате JSON-объектов с членами:

command

Индекс в члене commands объекта backtraceGraph.

file

Индекс в члене files объекта backtraceGraph.

line

Номер строки в файле, где была добавлена трассировка стека.

parent

Индекс в члене nodes объекта backtraceGraph, представляющий родительский элемент в графе.

tests

Массив JSON, перечисляющий информацию о каждом тесте. Каждый элемент — JSON-объект с членами:

name

Имя теста.

config

Конфигурация, на которой может выполняться тест. Пустая строка означает любую конфигурацию.

command

Список, где первый элемент — команда теста, а последующие — аргументы команды.

backtrace

Индекс в члене nodes объекта backtraceGraph.

properties

Свойства теста. Могут содержать ключи для каждого из поддерживаемых свойств теста.

Распределение ресурсов

CTest предоставляет механизм для тестов, позволяющий им точно указывать необходимые ресурсы, а пользователям — указывать доступные ресурсы на выполняемой машине. Это позволяет CTest отслеживать, какие ресурсы используются, а какие свободны, и планировать тесты так, чтобы они не пытались захватить недоступные ресурсы.

Типичный случай использования этой функции — тесты, требующие использования GPU. Несколько тестов могут одновременно выделять память из GPU, но если слишком много тестов пытаются сделать это одновременно, некоторые из них не смогут выделить память, что приведёт к ошибке теста, даже если бы тест выполнился успешно при наличии необходимой памяти. Используя функцию распределения ресурсов, каждый тест может указать, сколько памяти ему требуется из GPU, позволяя CTest планировать тесты таким образом, чтобы одновременное выполнение нескольких таких тестов не исчерпало пул памяти GPU.

Обратите внимание, что CTest не знает, что такое GPU или сколько у него памяти, и не имеет возможности взаимодействовать с GPU для получения этой информации или выполнения управления памятью. CTest просто отслеживает список абстрактных типов ресурсов, каждый из которых имеет определённое количество слотов, доступных для использования тестами. Каждый тест указывает количество слотов, которое ему требуется от определённого ресурса, а CTest планирует их так, чтобы общее количество используемых слотов не превышало указанной ёмкости. Когда тест выполняется, и слоты ресурса выделяются этому тесту, тесты могут предполагать, что они имеют исключительное право на эти слоты на всё время работы процесса теста.

Функция распределения ресурсов CTest состоит из двух входных данных:

  • Файл спецификации ресурсов, описанный ниже, который описывает доступные ресурсы в системе.
  • Свойство RESOURCE_GROUPS тестов, описывающее необходимые для теста ресурсы.

Когда CTest выполняет тест, распределённые этому тесту ресурсы передаются в виде набора переменных окружения, как описано ниже. Способ определения, к какому ресурсу подключиться, определяется разработчиком теста.

Свойство RESOURCE_GROUPS сообщает CTest, какие ресурсы ожидает использовать тест, сгруппированные осмысленным для теста образом. Сам тест должен читать переменные окружения, чтобы определить, какие ресурсы были выделены каждой группе. Например, каждая группа может соответствовать процессу, который тест запустит при выполнении.

Обратите внимание, что даже если тест указывает свойство RESOURCE_GROUPS, он всё равно может выполняться без распределения ресурсов (и без соответствующих переменных окружения), если пользователь не передаёт файл спецификации ресурсов. Передача этого файла, либо через аргумент командной строки --resource-spec-file, либо через аргумент RESOURCE_SPEC_FILE к ctest_test(), активирует функцию распределения ресурсов. Тесты должны проверять переменную окружения CTEST_RESOURCE_GROUP_COUNT, чтобы узнать, активировано ли распределение ресурсов. Эта переменная всегда (и только) определена, если распределение ресурсов активировано. Если распределение ресурсов не активировано, то переменная CTEST_RESOURCE_GROUP_COUNT не будет существовать, даже если она существует для родительского процесса ctest. Если тесту абсолютно необходимо распределение ресурсов, он может вернуть код ошибки, использовать свойства SKIP_RETURN_CODE или SKIP_REGULAR_EXPRESSION, чтобы указать на пропущенный тест.

Файл спецификации ресурсов

Файл спецификации ресурсов — это JSON-файл, передаваемый CTest, либо в командной строке ctest(1) как --resource-spec-file, либо как аргумент RESOURCE_SPEC_FILE к ctest_test(). Файл спецификации ресурсов должен быть объектом JSON. Все примеры в этом документе предполагают следующий файл спецификации ресурсов:

{
  "version": {
    "major": 1,
    "minor": 0
  },
  "local": [
    {
      "gpus": [
        {
          "id": "0",
          "slots": 2
        },
        {
          "id": "1",
          "slots": 4
        },
        {
          "id": "2",
          "slots": 2
        },
        {
          "id": "3"
        }
      ],
      "crypto_chips": [
        {
          "id": "card0",
          "slots": 4
        }
      ]
    }
  ]
}

Его члены:

version

Объект, содержащий поле major и поле minor. В настоящее время поддерживается только версия с главным компонентом 1 и второстепенным компонентом 0. Любое другое значение является ошибкой.

local

Массив JSON наборов ресурсов, присутствующих в системе. В настоящее время этот массив ограничен размером 1.

Каждый элемент массива — JSON-объект с именами членов, равными требуемым типам ресурсов, например, gpus. Эти имена должны начинаться с маленькой буквы или подчёркивания, а последующие символы могут быть маленькой буквой, цифрой или подчёркиванием. Заглавные буквы не допускаются, так как некоторые платформы имеют регистронезависимые переменные окружения. Подробнее см. раздел Переменные окружения ниже. Рекомендуется, чтобы имя типа ресурса было множественным числом существительного, например, gpus или crypto_chips (а не gpu или crypto_chip).

Обратите внимание, что имена gpus и crypto_chips — это просто примеры, и CTest их никак не интерпретирует. Вы можете создавать любые типы ресурсов, которые вам нужны.

Значение для каждого типа ресурса — это JSON-массив, состоящий из JSON-объектов, каждый из которых описывает конкретный экземпляр указанного ресурса. Эти объекты имеют следующие члены:

id

Строка, содержащая идентификатор ресурса. Каждый символ в идентификаторе может быть маленькой буквой, цифрой или подчёркиванием. Заглавные буквы не допускаются.

Идентификаторы должны быть уникальными внутри типа ресурса. Однако они не обязаны быть уникальными для различных типов ресурсов. Например, допустимо иметь ресурс gpus с именем 0 и ресурс crypto_chips с именем 0, но не два ресурса gpus с одинаковым именем 0.

Обратите внимание, что идентификаторы 0, 1, 2, 3, и card0 — это просто примеры, и CTest их никак не интерпретирует. Вы можете создавать любые идентификаторы, которые вам нужны.

slots

Необязательное целое неотрицательное число, указывающее количество слотов, доступных на ресурсе. Например, это может быть количество мегабайт ОЗУ на GPU или количество криптографических блоков на криптографическом чипе. Если slots не указано, используется значение по умолчанию 1.

В приведённом выше примере есть четыре GPU с идентификаторами от 0 до 3. GPU 0 имеет 2 слота, GPU 1 — 4, GPU 2 — 2, а GPU 3 — 1 слот по умолчанию. Также есть один криптографический чип с 4 слотами.

Свойство RESOURCE_GROUPS

См. RESOURCE_GROUPS для описания этого свойства.

Переменные окружения

После того, как CTest определил, какие ресурсы выделить тесту, он передаёт эту информацию исполняемому файлу теста в виде ряда переменных окружения. В следующих примерах будем предполагать, что у интересующего нас теста свойство RESOURCE_GROUPS имеет значение 2,gpus:2;gpus:4,gpus:1,crypto_chips:2.

Тесту передаются следующие переменные:

CTEST_RESOURCE_GROUP_COUNT

Общее количество групп, указанных в свойстве RESOURCE_GROUPS. Например:

  • CTEST_RESOURCE_GROUP_COUNT=3

Эта переменная будет определена только в том случае, если ctest(1) был задан --resource-spec-file, или если ctest_test() был задан RESOURCE_SPEC_FILE. Если файл спецификаций ресурсов не был задан, эта переменная не будет определена.

CTEST_RESOURCE_GROUP_<num>

Список типов ресурсов, выделенных для каждой группы, при этом каждый элемент разделен запятой. <num> — число от нуля до CTEST_RESOURCE_GROUP_COUNT минус один. CTEST_RESOURCE_GROUP_<num> определено для каждого значения <num> в этом диапазоне. Например:

  • CTEST_RESOURCE_GROUP_0=gpus
  • CTEST_RESOURCE_GROUP_1=gpus
  • CTEST_RESOURCE_GROUP_2=crypto_chips,gpus
CTEST_RESOURCE_GROUP_<num>_<resource-type>

Список идентификаторов ресурсов и количества слотов для каждого идентификатора, выделенных для каждой группы для данного типа ресурса. Эта переменная состоит из серии пар, каждая пара разделена точкой с запятой, а два элемента в паре разделены запятой. Первый элемент в каждой паре — id: и идентификатор ресурса типа <resource-type>, а второй элемент — slots: и количество слотов от этого ресурса, выделенных данной группе. Например:

  • CTEST_RESOURCE_GROUP_0_GPUS=id:0,slots:2
  • CTEST_RESOURCE_GROUP_1_GPUS=id:2,slots:2
  • CTEST_RESOURCE_GROUP_2_GPUS=id:1,slots:4;id:3,slots:1
  • CTEST_RESOURCE_GROUP_2_CRYPTO_CHIPS=id:card0,slots:2

В этом примере группа 0 получает 2 слота от GPU 0, группа 1 получает 2 слота от GPU 2, а группа 2 получает 4 слота от GPU 1, 1 слот от GPU 3, и 2 слота от криптографического чипа card0.

<num> — число от нуля до CTEST_RESOURCE_GROUP_COUNT минус один. <resource-type> — имя типа ресурса, преобразованное в верхний регистр. CTEST_RESOURCE_GROUP_<num>_<resource-type> определено для произведения каждого <num> в указанном диапазоне и каждого типа ресурса, перечисленного в CTEST_RESOURCE_GROUP_<num>.

Поскольку у некоторых платформ имена переменных среды регистронезависимы, имена типов ресурсов могут не конфликтовать в регистронезависимой среде. По этой причине, для простоты, все типы ресурсов должны быть перечислены в нижнем регистре в файле спецификаций ресурсов файле спецификаций ресурсов и в свойстве RESOURCE_GROUPS, а преобразовываются в верхний регистр в переменной среды CTEST_RESOURCE_GROUP_<num>_<resource-type>.

См. также

Следующие ресурсы доступны для получения помощи при использовании CMake:

Главная страница

https://cmake.org

Основная отправная точка для изучения CMake.

Онлайн-документация и ресурсы сообщества

https://cmake.org/documentation

Ссылки на доступную документацию и ресурсы сообщества можно найти на этой странице.

Форум Discourse

https://discourse.cmake.org

Форум Discourse предоставляет площадку для обсуждения и вопросов по CMake.

© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.16/manual/ctest.1.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API