Spec-Zone.ru › CMake 3.22

ctest(1)

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

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

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

    • Файл спецификации ресурсов
    • 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> в формате XML JUnit. Если <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 имеет метки вторник и производство
  • test2 имеет метки вторник и тест
  • test3 имеет метки среда и производство
  • test4 имеет метку среда
  • test5 имеет метки пятница и тест

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

Поскольку сопоставление работает с регулярными выражениями, обратите внимание, что запуск CTest с -L es будет соответствовать всем пяти тестам. Чтобы выбрать тесты вторник и среда вместе, используйте одно регулярное выражение, которое соответствует любому из них, например, -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

Предельное время в секундах.

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

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

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

Параметры для клиента панели управления включают:

--group <group>

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

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

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

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

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

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

--tomorrow-tag

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

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

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

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

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

--http1.0

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

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

--no-compress-output

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

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

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

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

Start

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

Update

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

Configure

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

Build

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

Test

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

Coverage

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

MemCheck

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

Submit

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

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

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

Nightly

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

Continuous

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

Experimental

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Шаг запуска CTest

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

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

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

BuildDirectory

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

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

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

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

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

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

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

BZRCommand

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

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

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

  • Скрипт CTest переменная: CTEST_BZR_UPDATE_OPTIONS
  • CTest модульная переменная: нет
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 модульная переменная: нет
HGUpdateOptions

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

  • Скрипт CTest переменная: CTEST_HG_UPDATE_OPTIONS
  • CTest модульная переменная: нет
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 переменная: нет
  • 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), это задаёт конфигурацию по умолчанию для сборки, когда к команде ctest нет параметра -C. Значение будет подставлено в значение MakeCommand, заменив строку ${CTEST_CONFIGURATION_TYPE} на него, если она встречается.

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

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

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

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

MakeCommand

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

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

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

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

Шаг CTest Test

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

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

ResourceSpecFile

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

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

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

LabelsForSubprojects

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

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

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

TestLoad

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

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

Значение таймаута по умолчанию для каждого теста, если не указано свойством теста TIMEOUT.

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

Чтобы отправить дополнительные значения тестов в 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 Script переменная: none
  • CTest модульная переменная: none
PurifyCommand

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

  • CTest Script переменная: none
  • CTest модульная переменная: PURIFYCOMMAND
ValgrindCommand

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

  • CTest Script переменная: none
  • CTest модульная переменная: VALGRIND_COMMAND
ValgrindCommandOptions

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

  • CTest Script переменная: none
  • CTest модульная переменная: VALGRIND_COMMAND_OPTIONS
DrMemoryCommand

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

  • CTest Script переменная: none
  • CTest модульная переменная: DRMEMORY_COMMAND
DrMemoryCommandOptions

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

  • CTest Script переменная: none
  • CTest модульная переменная: DRMEMORY_COMMAND_OPTIONS
CudaSanitizerCommand

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

  • CTest Script переменная: none
  • CTest модульная переменная: CUDA_SANITIZER_COMMAND
CudaSanitizerCommandOptions

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

  • CTest Script переменная: none
  • CTest модульная переменная: CUDA_SANITIZER_COMMAND_OPTIONS

Шаг отправки CTest

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

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

BuildName

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

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

Запись устаревшего параметра. Не используется.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

URL сервера панели мониторинга, в который нужно отправить результат, по http или https.

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

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

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

Отображение в формате JSON

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

kind

Строка "ctestInfo".

version

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

major

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

minor

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

backtraceGraph

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

commands

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

files

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

nodes

Список узлов в формате JSON с последующими членами:

command

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

file

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

line

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

parent

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

tests

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

name

Имя теста.

config

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

command

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

backtrace

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

properties

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

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

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

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

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

Обратите внимание, что CTest не имеет представления о том, что такое графический процессор или сколько памяти он имеет, и не может взаимодействовать с графическим процессором для получения этой информации или управления памятью. 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 (и не crypto_chips или 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–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/manual/ctest.1.html

Spec-Zone.ru

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