Spec-Zone.ru › CMake 3.18

ctest(1)

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

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

    • Шаг запуска CTest
    • Шаг обновления CTest
    • Шаг конфигурации CTest
    • Шаг сборки CTest
    • Шаг тестирования CTest
    • Шаг покрытия кода CTest
    • Шаг проверки памяти CTest
    • Шаг отправки CTest
  • Показать в формате JSON Object Model
  • Распределение ресурсов

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

Краткое описание

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

--stop-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 <mode>:<n>

Повторять тесты многократно, основываясь на заданном <mode> до <n> раз. Режимы:

until-fail

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

until-pass

Разрешить каждому тесту выполняться до <n> раз, чтобы пройти. Повторять тесты, если они завершатся ошибкой по любой причине. Это полезно для переносимости случайных ошибок в тестовых сценариях.

after-timeout

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

--repeat-until-fail <n>

Эквивалентно --repeat until-fail:<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

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

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

--no-tests=<[error|ignore]>

Рассматривать отсутствие тестов как ошибку или игнорировать её.

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

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

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

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

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

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

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

--help-full [<f>]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

--help-commands [<f>]

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

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

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

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

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

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

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

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

--help-modules [<f>]

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

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

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

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

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

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

Вывести список политик со справочной информацией и выйти.

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

--help-policies [<f>]

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

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

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

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

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

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

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

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

--help-properties [<f>]

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

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

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

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

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

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

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

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

--help-variables [<f>]

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

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

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

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>

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

Отправляет панель мониторинга в указанную группу вместо стандартной. По умолчанию панель мониторинга отправляется в группу «Ежедневная», «Экспериментальная» или «Непрерывная», но с помощью этого параметра группа может быть произвольной.

Заменяет устаревший параметр --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 проверки памяти" ниже.

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>
END_OF_DOCUMENT_MARKER

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

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

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

Шаг CTest Start

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

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

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

BuildDirectory

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

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

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

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

Шаг CTest Update

В Скрипте 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 Configure

В Сценарии 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 Build

В Сценарии 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 Test

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

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

ResourceSpecFile

Укажите файл спецификаций ресурсов файл спецификаций ресурсов.

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

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

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
DrMemoryCommand

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

  • Сценарий CTest переменная: none
  • CTest переменная модуля: DRMEMORY_COMMAND
DrMemoryCommandOptions

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

  • Сценарий CTest переменная: none
  • CTest переменная модуля: DRMEMORY_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 отслеживать, какие ресурсы используются, а какие свободны, и планировать тесты таким образом, чтобы они не пытались занять недоступные ресурсы.

Когда используется функция распределения ресурсов, CTest не будет перераспределять ресурсы. Например, если ресурс имеет 8 слотов, CTest не запустит тесты, которые в совокупности используют более 8 слотов одновременно. Это ограничивает количество одновременно выполняемых тестов, даже если используется большое значение аргумента -j, если эти тесты все используют некоторые слоты одного и того же ресурса. Кроме того, это означает, что отдельный тест, который использует больше ресурсов, чем доступно на машине, вообще не будет запущен (и будет отмечен как Not Run).

Типичный пример использования этой функции — тесты, требующие использования графического процессора (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(). Если используется скрипт панели мониторинга и RESOURCE_SPEC_FILE не указан, используется значение CTEST_RESOURCE_SPEC_FILE из скрипта панели мониторинга. Если --resource-spec-file, RESOURCE_SPEC_FILE, и CTEST_RESOURCE_SPEC_FILE в скрипте панели мониторинга не указаны, используется значение CTEST_RESOURCE_SPEC_FILE из CMake сборки. Если ничего из этого не указано, файл спецификации ресурсов не используется.

Файл спецификации ресурсов должен быть объектом 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 с ID от 0 до 3. У GPU 0 две слота, у GPU 1 — четыре, у GPU 2 — две, а у GPU 3 — по умолчанию одна слот. Также есть один криптографический чип с 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.18/manual/ctest.1.html

Spec-Zone.ru

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