Spec-Zone.ru › CMake 3.23

ctest(1)

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

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

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

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

Синопсис

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(), поддерживают тестирование. Эта программа будет запускать тесты и сообщать результаты.

Опции

--preset <preset>, --preset=<preset>

Используйте предварительно заданные параметры для указания опций тестирования. Директория двоичных файлов проекта определяется из ключа configurePreset. Текущая рабочая директория должна содержать файлы предварительной настройки CMake. Подробности см. в preset.

--list-presets

Список доступных предварительно заданных параметров тестирования. Текущая рабочая директория должна содержать файлы предварительной настройки CMake.

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

--output-junit <file>

Записать результаты теста в формате JUnit.

Эта опция сообщает CTest записать результаты теста в файл <file> в формате JUnit XML. Если файл <file> уже существует, он будет перезаписан. Если используется опция -S для выполнения сценария панели мониторинга, используйте ключевое слово OUTPUT_JUNIT с командой ctest_test() вместо неё.

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

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

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

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

human

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

json-v1

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

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

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

Эта опция сообщает CTest запускать только тесты, метки которых соответствуют заданному регулярному выражению. При использовании нескольких опций -L, тест будет запущен только если каждое регулярное выражение соответствует хотя бы одной из меток теста (то есть, несколько меток -L образуют отношение AND). См. Сопоставление меток.

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

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

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

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

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

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

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

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

Эта опция сообщает CTest НЕ запускать тесты, метки которых соответствуют заданному регулярному выражению. При использовании нескольких опций -LE, тест будет исключён только если каждое регулярное выражение соответствует хотя бы одной из меток теста (то есть, несколько меток -LE образуют отношение AND). См. Сопоставление меток.

-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 запускать тесты в интерактивном или неинтерактивном режиме. В режиме панели мониторинга (Experimental, Nightly, Continuous ) по умолчанию используется неинтерактивный режим. В неинтерактивном режиме устанавливается переменная среды DASHBOARD_TEST_FROM_CTEST.

До CMake 3.11 интерактивный режим в Windows позволял отображаться всплывающие окна отладки системы. Теперь, из-за использования CTest libuv для запуска тестовых процессов, все всплывающие окна отладки системы всегда блокируются.

--no-label-summary

Отключить информацию о сводке времени для меток.

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

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

--no-subproject-summary

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

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

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

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

--test-dir <dir> Указать каталог, в котором следует искать тесты.

--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>айл, если он задан.

--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>айл, если он задан.

Сопоставление меток

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

Когда используется -L, для включения теста в выполнение теста каждое регулярное выражение должно соответствовать хотя бы одной метке. Использование более одной опции -L означает «сопоставить все из этих».

Опция -LE работает так же, как -L, но исключает тесты, а не включает их. Тест исключается, если каждое регулярное выражение соответствует хотя бы одной метке.

Если у теста нет прикреплённых меток, то -L никогда не будет включать этот тест, и -LE никогда не будет исключать этот тест. В качестве примера тестов с метками рассмотрим пять тестов с указанными метками:

  • test1 имеет метки tuesday и production
  • test2 имеет метки tuesday и test
  • test3 имеет метки wednesday и production
  • test4 имеет метку wednesday
  • test5 имеет метки friday и test

Запуск ctest с -L tuesday -L test выберет test2, который имеет обе метки. Запуск CTest с -L test выберет test2 и test5, потому что у обоих есть метка, соответствующая регулярному выражению.

Поскольку сопоставление выполняется с помощью регулярных выражений, обратите внимание, что запуск CTest с -L es будет соответствовать всем пяти тестам. Чтобы выбрать тесты tuesday и wednesday вместе, используйте одно регулярное выражение, которое соответствует одному из них, например -L "tue|wed".

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

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

Новое в версии 3.22: Метки, добавленные динамически во время выполнения теста, также отображаются в сводке времени. См. Дополнительные метки.

Когда свойство теста 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

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

Dashboard Client

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

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

Параметры для Dashboard Client включают:

--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, которая не поддерживает сжатые выходные данные тестов.

Шаги Dashboard Client

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

Start

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

Update

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

Configure

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

Build

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

Test

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

Coverage

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

MemCheck

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

Submit

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

Режимы Dashboard Client

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 по умолчанию.

Dashboard Client через командную строку CTest

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

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

<mode> должен быть одним из вышеперечисленных режимов Dashboard Client Modes, а каждый <step> должен быть одним из вышеперечисленных шагов Dashboard Client Steps.

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

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

где <setting> - имя параметра, а <value> - значение параметра.

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

Dashboard Client через скрипт CTest

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

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

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

Конфигурация Dashboard Client

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

Шаг CTest Start

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

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

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

BuildDirectory

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

  • Сценарий CTest переменная: CTEST_BINARY_DIRECTORY
  • CTest модуль переменная: PROJECT_BINARY_DIR
SourceDirectory

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

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

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

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

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

BZRCommand

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

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

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

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

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

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

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

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

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

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

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

GITInitSubmodules

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Опции командной строки для P4Command для всех вызовов.

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

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

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

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

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

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

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

Опции командной строки для SVNCommand для всех вызовов.

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

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

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

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

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

Параметры командной строки для UpdateCommand.

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

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

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

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

  • Сценарий CTest переменная: CTEST_UPDATE_VERSION_ONLY
UpdateVersionOverride

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

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

  • Сценарий CTest переменная: CTEST_UPDATE_VERSION_OVERRIDE

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

NightlyStartTime

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

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

Шаг CTest 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

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

Для отправки дополнительных значений теста в CDash, см. Дополнительные измерения теста.

Шаг покрытия кода CTest

В сценарии 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
CudaSanitizerCommand

Укажите MemoryCheckCommand, который, как известно, совместим с командной строкой cuda-memcheck или compute-sanitizer.

  • Сценарий CTest переменная: none
  • CTest модульная переменная: CUDA_SANITIZER_COMMAND
CudaSanitizerCommandOptions

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

  • Сценарий CTest переменная: none
  • CTest модульная переменная: CUDA_SANITIZER_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
SubmitInactivityTimeout

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

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

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

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

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

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

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

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

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

RESOURCE_GROUPS Свойство

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

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

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

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

CTEST_RESOURCE_GROUP_COUNT

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

  • CTEST_RESOURCE_GROUP_COUNT=3

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

CTEST_RESOURCE_GROUP_<num>

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

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

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

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

В этом примере группе 0 выделено 2 слота от графического процессора 0, группе 1 — 2 слота от графического процессора 2, а группе 2 — 4 слота от графического процессора 1, 1 слот от графического процессора 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.

CDash: https://cdash.org

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

Spec-Zone.ru

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