Spec-Zone.ru › CMake 3.21

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 записать результаты тестов в файл JUnit XML <file>. Если файл <file> уже существует, он будет перезаписан.

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

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

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

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

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

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

--help-commands [<f>]

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

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

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

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

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

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

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

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

--help-modules [<f>]

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

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

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

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

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

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

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

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

--help-policies [<f>]

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

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

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

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

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

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

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

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

--help-properties [<f>]

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

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

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

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

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

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

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

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

for labels/subprojects j=1...total

где:

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

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

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

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

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

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

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

--build-target

Укажите конкретную цель сборки.

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

--build-nocmake

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

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

--build-run-dir

Укажите директорию для запуска программ.

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

--build-two-config

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

--build-exe-dir

Укажите директорию для исполняемого файла.

--build-generator

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

--build-generator-platform

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

--build-generator-toolset

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

--build-project

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

--build-makeprogram

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

--build-noclean

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

--build-config-sample

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

--build-options

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

--test-command

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

--test-timeout

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

Клиент панели мониторинга

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

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

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

--group <group>

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

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

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

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

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

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

--tomorrow-tag

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

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

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

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

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

--http1.0

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

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

--no-compress-output

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

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

Шаги клиента панели мониторинга

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

Start

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

Update

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

Configure

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

Build

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

Test

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

Coverage

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

MemCheck

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

Submit

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

Режимы работы клиента панели мониторинга

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 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 Настройка

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

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

ConfigureCommand

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

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

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

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

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

Шаг CTest Сборка

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

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

DefaultCTestConfigurationType

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

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

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

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

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

MakeCommand

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

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

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

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

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

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

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

ResourceSpecFile

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

  • Сценарий 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

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

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

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

RESOURCE_GROUPS Свойство

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

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

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

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

CTEST_RESOURCE_GROUP_COUNT

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

  • CTEST_RESOURCE_GROUP_COUNT=3

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

CTEST_RESOURCE_GROUP_<num>

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

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

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

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

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

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

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

См. также

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

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

https://cmake.org

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

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

https://cmake.org/documentation

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

Форум Discourse

https://discourse.cmake.org

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

CDash: https://cdash.org

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

Spec-Zone.ru

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