ctest(1)
- Синтаксис
- Описание
- Опции
- Сводка по меткам и подпроектам
- Режим сборки и тестирования
- Отображение в формате 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]: Значение свойства CTestPROCESSORSдля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
-
Переменная скрипта CTest:
-
SourceDirectory -
Полный путь к дереву исходного кода проекта.
-
Переменная скрипта CTest:
CTEST_SOURCE_DIRECTORY -
Переменная модуля
CTest:PROJECT_SOURCE_DIR
-
Переменная скрипта CTest:
Шаг обновления CTest
В скрипте CTest, команда ctest_update() выполняет этот шаг. Аргументы команды могут указать некоторые настройки шага.
Настройки конфигурации для указания инструмента контроля версий включают:
-
BZRCommand -
bzrкомандная утилита для использования, если исходное дерево управляется Bazaar.-
Скрипт CTest переменная:
CTEST_BZR_COMMAND -
CTestмодульная переменная: none
-
Скрипт CTest переменная:
-
BZRUpdateOptions -
Командная строка параметров для
BZRCommandпри обновлении исходного кода.-
Скрипт CTest переменная:
CTEST_BZR_UPDATE_OPTIONS -
CTestмодульная переменная: none
-
Скрипт CTest переменная:
-
CVSCommand -
cvsкомандная утилита для использования, если исходное дерево управляется CVS.-
Скрипт CTest переменная:
CTEST_CVS_COMMAND -
CTestмодульная переменная:CVSCOMMAND
-
Скрипт CTest переменная:
-
CVSUpdateOptions -
Командная строка параметров для
CVSCommandпри обновлении исходного кода.-
Скрипт CTest переменная:
CTEST_CVS_UPDATE_OPTIONS -
CTestмодульная переменная:CVS_UPDATE_OPTIONS
-
Скрипт CTest переменная:
-
GITCommand -
gitкомандная утилита для использования, если исходное дерево управляется Git.-
Скрипт CTest переменная:
CTEST_GIT_COMMAND -
CTestмодульная переменная:GITCOMMAND
Исходное дерево обновляется с помощью
git fetch, за которым следуетgit reset --hardдоFETCH_HEAD. Результат такой же, как уgit pull, за исключением того, что любые локальные изменения перезаписываются. ИспользуйтеGITUpdateCustom, чтобы указать другой подход. -
Скрипт CTest переменная:
-
GITInitSubmodules -
Если установлено, CTest обновит подмодули репозитория перед обновлением.
-
Скрипт CTest переменная:
CTEST_GIT_INIT_SUBMODULES -
CTestмодульная переменная:CTEST_GIT_INIT_SUBMODULES
-
Скрипт CTest переменная:
-
GITUpdateCustom -
Укажите пользовательскую командную строку (в виде списка, разделенного точкой с запятой), которая будет выполнена в исходном дереве (рабочей области Git), чтобы обновить его вместо запуска
GITCommand.-
Скрипт CTest переменная:
CTEST_GIT_UPDATE_CUSTOM -
CTestмодульная переменная:CTEST_GIT_UPDATE_CUSTOM
-
Скрипт CTest переменная:
-
GITUpdateOptions -
Командная строка параметров для
GITCommandпри обновлении исходного кода.-
Скрипт CTest переменная:
CTEST_GIT_UPDATE_OPTIONS -
CTestмодульная переменная:GIT_UPDATE_OPTIONS
-
Скрипт CTest переменная:
-
HGCommand -
hgкомандная утилита для использования, если исходное дерево управляется Mercurial.-
Скрипт CTest переменная:
CTEST_HG_COMMAND -
CTestмодульная переменная: none
-
Скрипт CTest переменная:
-
HGUpdateOptions -
Командная строка параметров для
HGCommandпри обновлении исходного кода.-
Скрипт CTest переменная:
CTEST_HG_UPDATE_OPTIONS -
CTestмодульная переменная: none
-
Скрипт CTest переменная:
-
P4Client -
Значение параметра
-cдляP4Command.-
Скрипт CTest переменная:
CTEST_P4_CLIENT -
CTestмодульная переменная:CTEST_P4_CLIENT
-
Скрипт CTest переменная:
-
P4Command -
p4командная утилита для использования, если исходное дерево управляется Perforce.-
Скрипт CTest переменная:
CTEST_P4_COMMAND -
CTestмодульная переменная:P4COMMAND
-
Скрипт CTest переменная:
-
P4Options -
Командная строка параметров для
P4Commandдля всех вызовов.-
Скрипт CTest переменная:
CTEST_P4_OPTIONS -
CTestмодульная переменная:CTEST_P4_OPTIONS
-
Скрипт CTest переменная:
-
P4UpdateCustom -
Укажите пользовательскую командную строку (в виде списка, разделенного точкой с запятой), которая будет выполнена в исходном дереве (дереве Perforce), чтобы обновить его вместо запуска
P4Command.- Скрипт CTest переменная: none
-
CTestмодульная переменная:CTEST_P4_UPDATE_CUSTOM
-
P4UpdateOptions -
Командная строка параметров для
P4Commandпри обновлении исходного кода.-
Скрипт CTest переменная:
CTEST_P4_UPDATE_OPTIONS -
CTestмодульная переменная:CTEST_P4_UPDATE_OPTIONS
-
Скрипт CTest переменная:
-
SVNCommand -
svnкомандная утилита для использования, если исходное дерево управляется Subversion.-
Скрипт CTest переменная:
CTEST_SVN_COMMAND -
CTestмодульная переменная:SVNCOMMAND
-
Скрипт CTest переменная:
-
SVNOptions -
Командная строка параметров для
SVNCommandдля всех вызовов.-
Скрипт CTest переменная:
CTEST_SVN_OPTIONS -
CTestмодульная переменная:CTEST_SVN_OPTIONS
-
Скрипт CTest переменная:
-
SVNUpdateOptions -
Командная строка параметров для
SVNCommandпри обновлении исходного кода.-
Скрипт CTest переменная:
CTEST_SVN_UPDATE_OPTIONS -
CTestмодульная переменная:SVN_UPDATE_OPTIONS
-
Скрипт CTest переменная:
-
UpdateCommand
-
Укажите инструмент командной строки для управления версиями, не определяя систему управления версиями (VCS), которая управляет деревом исходных кодов.
-
Скрипт CTest переменная:
CTEST_UPDATE_COMMAND -
CTestмодульная переменная:<VCS>COMMANDкогдаUPDATE_TYPEравно<vcs>, иначеUPDATE_COMMAND
-
Скрипт CTest переменная:
-
UpdateOptions -
Опции командной строки для
UpdateCommand.-
Скрипт CTest переменная:
CTEST_UPDATE_OPTIONS -
CTestмодульная переменная:<VCS>_UPDATE_OPTIONSкогдаUPDATE_TYPEравно<vcs>, иначеUPDATE_OPTIONS
-
Скрипт CTest переменная:
-
UpdateType -
Укажите систему управления версиями, которая управляет деревом исходного кода, если ее нельзя автоматически обнаружить. Значение может быть
bzr,cvs,git,hg,p4, илиsvn.- Скрипт CTest переменная: нет, определяется из дерева исходного кода
-
CTestмодульная переменная:UPDATE_TYPEесли установлено, иначеCTEST_UPDATE_TYPE
-
UpdateVersionOnly -
Укажите, что вы хотите, чтобы команда обновления системы управления версиями обнаружила только текущую версию, которая выбрана, а не обновлялась до другой версии.
-
Скрипт CTest переменная:
CTEST_UPDATE_VERSION_ONLY
-
Скрипт CTest переменная:
-
UpdateVersionOverride -
Укажите текущую версию вашего дерева исходного кода.
Когда эта переменная установлена в непустую строку, CTest сообщит значение, которое вы указали, а не будет использовать команду обновления для поиска текущей выбранной версии. Использование этой переменной заменяет
UpdateVersionOnly. Как иUpdateVersionOnly, использование этой переменной сообщает CTest, что он не должен обновлять дерево исходного кода до другой версии.-
Скрипт CTest переменная:
CTEST_UPDATE_VERSION_OVERRIDE
-
Скрипт CTest переменная:
Дополнительные параметры конфигурации включают:
-
NightlyStartTime -
В режиме панели мониторинга
Nightly, укажите «время начала ночных сборок». В централизованных системах управления версиями (cvsиsvn) этапUpdateвыбирает версию программного обеспечения на эту дату и время, чтобы несколько клиентов выбрали общую версию для тестирования. В распределенных системах управления версиями это не определено, поэтому настройка игнорируется.-
Скрипт CTest переменная:
CTEST_NIGHTLY_START_TIME -
CTestмодульная переменная:NIGHTLY_START_TIMEесли установлено, иначеCTEST_NIGHTLY_START_TIME
-
Скрипт CTest переменная:
Шаг конфигурации CTest
В скрипте CTest команда ctest_configure() выполняет этот шаг. Аргументы команды могут указать некоторые из параметров шага.
Параметры конфигурации включают:
-
ConfigureCommand -
Командная строка для запуска процесса конфигурации программного обеспечения. Она будет выполнена в расположении, указанном настройкой
BuildDirectory.-
Скрипт CTest переменная:
CTEST_CONFIGURE_COMMAND -
CTestмодульная переменная:CMAKE_COMMANDза которым следуетPROJECT_SOURCE_DIR
-
Скрипт CTest переменная:
-
LabelsForSubprojects -
Укажите список меток, разделенных точкой с запятой, которые будут рассматриваться как подпроекты. Это отображение будет передано в CDash при отправке результатов конфигурации, тестирования или сборки.
-
Скрипт CTest переменная:
CTEST_LABELS_FOR_SUBPROJECTS -
CTestмодульная переменная:CTEST_LABELS_FOR_SUBPROJECTS
-
Скрипт CTest переменная:
Шаг сборки 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
-
Скрипт CTest переменная:
-
LabelsForSubprojects -
Укажите список меток, разделенных точкой с запятой, которые будут рассматриваться как подпроекты. Это отображение будет передано в CDash при отправке результатов конфигурации, тестирования или сборки.
-
Скрипт CTest переменная:
CTEST_LABELS_FOR_SUBPROJECTS -
CTestмодульная переменная:CTEST_LABELS_FOR_SUBPROJECTS
-
Скрипт CTest переменная:
-
MakeCommand -
Командная строка для запуска процесса сборки программного обеспечения. Она будет выполнена в расположении, указанном настройкой
BuildDirectory.-
Скрипт CTest переменная:
CTEST_BUILD_COMMAND -
CTestмодульная переменная:MAKECOMMAND, инициализированная командойbuild_command()
-
Скрипт CTest переменная:
-
UseLaunchers -
Для деревьев сборки, сгенерированных CMake с использованием одного из Генераторов Makefile или генератора
Ninja, укажите, включена ли функцияCTEST_USE_LAUNCHERS, используемая модулемCTestUseLaunchers(также включённым в модульCTest). При включении сгенерированная система сборки обернёт каждый вызов компилятора, компоновщика или пользовательской командной строки «загрузчиком», который взаимодействует с CTest через переменные окружения и файлы для отчёта о детальных предупреждениях и ошибках сборки. В противном случае CTest должен «извлечь» диагностику из журнала вывода сборки.-
Скрипт CTest переменная:
CTEST_USE_LAUNCHERS -
CTestмодульная переменная:CTEST_USE_LAUNCHERS
-
Скрипт CTest переменная:
Шаг тестирования CTest
В скрипте CTest, команда ctest_test() выполняет этот шаг. Аргументы команды могут задать некоторые настройки шага.
Настройки конфигурации включают:
-
ResourceSpecFile -
Укажите файл спецификации ресурсов файл спецификации ресурсов. Дополнительную информацию см. в разделе Распределение ресурсов.
-
LabelsForSubprojects -
Укажите список меток, разделённых точкой с запятой, которые будут обрабатываться как подпроекты. Это отображение будет передано в CDash при отправке результатов конфигурации, тестирования или сборки.
-
Переменная скрипта CTest:
CTEST_LABELS_FOR_SUBPROJECTS -
Переменная модуля
CTest:CTEST_LABELS_FOR_SUBPROJECTS
-
Переменная скрипта CTest:
-
TestLoad -
Во время параллельного выполнения тестов (например, с
-j), старайтесь не запускать тесты, которые могут привести к превышению заданного порога нагрузки процессора.-
Переменная скрипта CTest:
CTEST_TEST_LOAD -
Переменная модуля
CTest:CTEST_TEST_LOAD
-
Переменная скрипта CTest:
-
TimeOut -
Стандартный таймаут для каждого теста, если не указан свойством теста
TIMEOUT.-
Переменная скрипта CTest:
CTEST_TEST_TIMEOUT -
Переменная модуля
CTest:DART_TESTING_TIMEOUT
-
Переменная скрипта CTest:
Шаг CTest Coverage
В скрипте CTest, команда ctest_coverage() выполняет этот шаг. Аргументы команды могут задать некоторые настройки шага.
Настройки конфигурации включают:
-
CoverageCommand -
Инструмент командной строки для анализа покрытия ПО. Он будет выполняться в месте, указанном параметром
BuildDirectory.-
Переменная скрипта CTest:
CTEST_COVERAGE_COMMAND -
Переменная модуля
CTest:COVERAGE_COMMAND
-
Переменная скрипта CTest:
-
CoverageExtraFlags -
Укажите параметры командной строки для инструмента
CoverageCommand.-
Переменная скрипта CTest:
CTEST_COVERAGE_EXTRA_FLAGS -
Переменная модуля
CTest:COVERAGE_EXTRA_FLAGS
Эти параметры являются первыми аргументами, передаваемыми инструменту
CoverageCommand. -
Переменная скрипта CTest:
Шаг CTest MemCheck
В скрипте CTest, команда ctest_memcheck() выполняет этот шаг. Аргументы команды могут задать некоторые настройки шага.
Настройки конфигурации включают:
-
MemoryCheckCommand -
Инструмент командной строки для динамического анализа. Команды тестов будут запускаться через этот инструмент.
-
Переменная скрипта CTest:
CTEST_MEMORYCHECK_COMMAND -
Переменная модуля
CTest:MEMORYCHECK_COMMAND
-
Переменная скрипта CTest:
-
MemoryCheckCommandOptions -
Укажите параметры командной строки для инструмента
MemoryCheckCommand. Они будут размещены перед командой теста.-
Переменная скрипта CTest:
CTEST_MEMORYCHECK_COMMAND_OPTIONS -
Переменная модуля
CTest:MEMORYCHECK_COMMAND_OPTIONS
-
Переменная скрипта CTest:
-
MemoryCheckType -
Укажите тип проверки памяти.
-
Переменная скрипта CTest:
CTEST_MEMORYCHECK_TYPE -
Переменная модуля
CTest:MEMORYCHECK_TYPE
-
Переменная скрипта CTest:
-
MemoryCheckSanitizerOptions -
Укажите параметры для сантайзеров при запуске со сборкой, поддерживающей сантайзеры.
-
Переменная скрипта CTest:
CTEST_MEMORYCHECK_SANITIZER_OPTIONS -
Переменная модуля
CTest:MEMORYCHECK_SANITIZER_OPTIONS
-
Переменная скрипта CTest:
-
MemoryCheckSuppressionFile -
Укажите файл с правилами подавления для инструмента
MemoryCheckCommand. Он будет передан с параметрами, соответствующими инструменту.-
Переменная скрипта CTest:
CTEST_MEMORYCHECK_SUPPRESSIONS_FILE -
Переменная модуля
CTest:MEMORYCHECK_SUPPRESSIONS_FILE
-
Переменная скрипта CTest:
-
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
-
Сценарий CTest переменная:
-
CDashVersion -
Устаревшая опция. Не используется.
- Сценарий CTest переменная: нет, определяется из сервера
-
CTestмодульная переменная:CTEST_CDASH_VERSION
-
CTestSubmitRetryCount -
Укажите количество попыток повторной отправки при сбое сети.
-
Сценарий CTest переменная: нет, используйте опцию
ctest_submit()RETRY_COUNT. -
CTestмодульная переменная:CTEST_SUBMIT_RETRY_COUNT
-
Сценарий CTest переменная: нет, используйте опцию
-
CTestSubmitRetryDelay -
Укажите задержку перед повторной отправкой при сбое сети.
-
Сценарий CTest переменная: нет, используйте опцию
ctest_submit()RETRY_DELAY. -
CTestмодульная переменная:CTEST_SUBMIT_RETRY_DELAY
-
Сценарий CTest переменная: нет, используйте опцию
-
CurlOptions -
Укажите список опций, разделённых точкой с запятой, для управления библиотекой Curl, которую CTest использует для подключения к серверу. Возможные опции —
CURLOPT_SSL_VERIFYPEER_OFFиCURLOPT_SSL_VERIFYHOST_OFF.-
Сценарий CTest переменная:
CTEST_CURL_OPTIONS -
CTestмодульная переменная:CTEST_CURL_OPTIONS
-
Сценарий CTest переменная:
-
DropLocation -
Устаревшая опция. Если
SubmitURLне задано, оно строится изDropMethod,DropSiteUser,DropSitePassword,DropSite, иDropLocation.-
Сценарий CTest переменная:
CTEST_DROP_LOCATION -
CTestмодульная переменная:DROP_LOCATION, если задано, иначеCTEST_DROP_LOCATION
-
Сценарий CTest переменная:
-
DropMethod -
Устаревшая опция. Если
SubmitURLне задано, оно строится изDropMethod,DropSiteUser,DropSitePassword,DropSite, иDropLocation.-
Сценарий CTest переменная:
CTEST_DROP_METHOD -
CTestмодульная переменная:DROP_METHOD, если задано, иначеCTEST_DROP_METHOD
-
Сценарий CTest переменная:
-
DropSite -
Устаревшая опция. Если
SubmitURLне задано, оно строится изDropMethod,DropSiteUser,DropSitePassword,DropSite, иDropLocation.-
Сценарий CTest переменная:
CTEST_DROP_SITE -
CTestмодульная переменная:DROP_SITE, если задано, иначеCTEST_DROP_SITE
-
Сценарий CTest переменная:
-
DropSitePassword -
Устаревшая опция. Если
SubmitURLне задано, оно строится изDropMethod,DropSiteUser,DropSitePassword,DropSite, иDropLocation.-
Сценарий CTest переменная:
CTEST_DROP_SITE_PASSWORD -
CTestмодульная переменная:DROP_SITE_PASSWORD, если задано, иначеCTEST_DROP_SITE_PASWORD
-
Сценарий CTest переменная:
-
DropSiteUser -
Устаревшая опция. Если
SubmitURLне задано, оно строится изDropMethod,DropSiteUser,DropSitePassword,DropSite, иDropLocation.-
Сценарий CTest переменная:
CTEST_DROP_SITE_USER -
CTestмодульная переменная:DROP_SITE_USER, если задано, иначеCTEST_DROP_SITE_USER
-
Сценарий CTest переменная:
-
IsCDash -
Устаревшая опция. Не используется.
-
Сценарий CTest переменная:
CTEST_DROP_SITE_CDASH -
CTestмодульная переменная:CTEST_DROP_SITE_CDASH
-
Сценарий CTest переменная:
-
ScpCommand -
Устаревшая опция. Не используется.
-
Сценарий CTest переменная:
CTEST_SCP_COMMAND -
CTestмодульная переменная:SCPCOMMAND
-
Сценарий CTest переменная:
-
Site -
Опишите хост-сайт клиента панели мониторинга короткой строкой. (Имя хоста, домен и т. д.)
-
Сценарий CTest переменная:
CTEST_SITE -
CTestмодульная переменная:SITE, инициализируется командойsite_name()
-
Сценарий CTest переменная:
-
SubmitURL -
URL сервера панели мониторинга (
httpилиhttps) для отправки результата.-
Сценарий CTest переменная:
CTEST_SUBMIT_URL -
CTestмодульная переменная:SUBMIT_URL, если задано, иначеCTEST_SUBMIT_URL
-
Сценарий CTest переменная:
-
TriggerSite -
Устаревшая опция. Не используется.
-
Сценарий CTest переменная:
CTEST_TRIGGER_SITE -
CTestмодульная переменная:TRIGGER_SITE, если задано, иначеCTEST_TRIGGER_SITE
-
Сценарий CTest переменная:
Отобразить как 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=gpusCTEST_RESOURCE_GROUP_1=gpusCTEST_RESOURCE_GROUP_2=crypto_chips,gpus
-
CTEST_RESOURCE_GROUP_<num>_<resource-type> -
Список идентификаторов ресурсов и количества слотов для каждого идентификатора, выделенных для каждой группы для данного типа ресурса. Эта переменная состоит из серии пар, каждая пара разделена точкой с запятой, а два элемента в паре разделены запятой. Первый элемент в каждой паре —
id:и идентификатор ресурса типа<resource-type>, а второй элемент —slots:и количество слотов от этого ресурса, выделенных данной группе. Например:CTEST_RESOURCE_GROUP_0_GPUS=id:0,slots:2CTEST_RESOURCE_GROUP_1_GPUS=id:2,slots:2CTEST_RESOURCE_GROUP_2_GPUS=id:1,slots:4;id:3,slots:1CTEST_RESOURCE_GROUP_2_CRYPTO_CHIPS=id:card0,slots:2
В этом примере группа 0 получает 2 слота от GPU
0, группа 1 получает 2 слота от GPU2, а группа 2 получает 4 слота от GPU1, 1 слот от GPU3, и 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:
- Главная страница
-
Основная отправная точка для изучения CMake.
- Онлайн-документация и ресурсы сообщества
-
https://cmake.org/documentation
Ссылки на доступную документацию и ресурсы сообщества можно найти на этой странице.
- Форум Discourse
-
Форум 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