Симптом: приложение завершается во время UI-теста, а задание CI показывает результат, который не соответствует ожиданиям команды.
Быстрое решение: не блокируйте все такие тесты одинаково; задайте правила по риску для PR, регрессионного прогона и выпуска, затем подтвердите поведение на контролируемом задании с установленной версией Xcode 27.2. Для допуска релиза используйте результат командного CI-прогона, а не предположение, сделанное только по настройке Test Plan.
Инженерам CI этот материал поможет связать результат XCTest с состоянием конвейера.
Руководители QA смогут отделить ожидаемый сценарий от дефекта, влияющего на выпуск.
Технические руководители найдут критерии для согласования политики и проверяемой приёмки.
Обновлено 2 ноября 2026 года; сведения о параметрах сверены с примечаниями Apple к Xcode 27, примечаниями к Xcode 27.2 и требованиями Xcode к системе. Настройки и результаты конкретного проекта требуют отдельной проверки в его среде.
Инженерам CI: граница между параметром и политикой
В примечаниях Apple к Xcode 27 описан параметр серьёзности для сбоев приложения в UI-тестах. Это настройка обработки результата теста, а не готовое правило организации: доступные значения, их подписи и применимость к установленному релизу следует сверять с текущими примечаниями к выпуску Xcode и настройками самого проекта. Документация Xcode 27.2 и системные требования помогают проверить версию среды, но не определяют политику слияния или выпуска.
В Test Plan нужно зафиксировать не только выбранный параметр, но и контекст его применения: какой план использует схема, какая конфигурация запускается в CI и где сохраняется результат. Руководство Apple по редактированию Test Plan описывает работу с планами и конфигурациями. Однако конкретный путь к параметру серьёзности следует подтвердить в установленной версии, а не считать неизменным по старому скриншоту или чужому описанию.
Ключевая граница проходит между результатом теста и решением конвейера. Test Plan может повлиять на то, как Xcode классифицирует событие; окончательное состояние задания зависит также от того, как сборочная команда и CI-адаптер читают результат. Поэтому перед утверждением политики инженер CI проверяет всю цепочку: тестовый план, запуск xcodebuild, сохранённый пакет результатов и условие, по которому задание завершается успешно или с ошибкой. Справочник Apple по средствам командной строки Xcode помогает сверить используемые команды.
Для записи прогона можно использовать такой шаблон команды, подставив параметры проекта:
xcodebuild \
-scheme "$SCHEME" \
-destination "$DESTINATION" \
-resultBundlePath "$RESULT_BUNDLE" \
test
Переменные здесь обозначают параметры конкретного конвейера, а не готовые значения для любой команды. Сохраните фактический вывод задачи рядом с результатным пакетом. Условный фрагмент журнала может выглядеть так:
Test Plan: <имя плана>
UI test result: <состояние теста>
Build command result: <результат команды>
CI job result: <состояние задания>
Это не обещание того, что конкретный статус теста автоматически даст определённый статус задания. Шаблон нужен, чтобы отделить факты выполнения от решения CI и сделать проверку воспроизводимой. Если адаптер интерпретирует результатный пакет иначе, чем ожидалось, именно его поведение необходимо исследовать до расширения политики на другие задачи.
Разработчикам приложения: реестр сценариев сбоев
До изменения политики разработчики и владельцы тестов составляют список сценариев, которые могут завершаться сбоем приложения. Один и тот же внешний признак не раскрывает причину: событие может быть ожидаемым действием теста, неожиданным поведением продукта или проблемой выполнения самого тестового процесса. Причину нельзя назначать по одному сообщению в журнале — её подтверждают шаги сценария, запись теста и состояние приложения.
Для каждого сценария зафиксируйте:
- имя UI-теста и связанный Test Plan;
- действие, после которого регистрируется завершение приложения;
- ожидаемый исход с точки зрения продукта и теста;
- сохранённое подтверждение: запись, журнал или результат теста;
- владельца теста, который может подтвердить классификацию.
Документация Apple по XCUIAutomation описывает средства взаимодействия с пользовательским интерфейсом, а материалы о обработке прерываний UI помогают учесть ситуации, которые меняют ход теста. Эти источники полезны для разбора механики, но не определяют, является ли конкретный сбой допустимым для продукта.
Особенно важно не превращать исключение для одного проверенного сценария в общее разрешение для всех UI-тестов. Если команда допускает ожидаемый сбой в отдельном тесте, исключение должно быть привязано к нему и иметь владельца. При изменении сценария владелец повторно подтверждает ожидаемое поведение; без такого подтверждения исключение теряет основание и должно быть рассмотрено заново.
Практический риск часто возникает на стыке компонентов: Xcode формирует результат, обёртка задания его интерпретирует, а правила репозитория принимают решение о слиянии. Поэтому разработчикам следует проверять не только наличие сообщения о сбое, но и полный путь от конкретного теста до итогового статуса задания. Это инженерное наблюдение, а не заявленная Apple гарантия поведения CI.
Руководителям QA: матрица допуска
Решение зависит от назначения прогона, последствий сбоя и возможности повторной проверки. Сначала согласуйте классификацию с владельцем теста, затем выберите режим обработки. Следующая матрица — инструмент принятия решения команды; она не описывает предписания Apple.
| Вариант | Где применять | Условие решения | Что зафиксировать |
|---|---|---|---|
| Наблюдение с уведомлением | PR или диагностический прогон, когда команда собирает данные и сбой ещё не признан релизным критерием | Ответственный видит результат и разбирает событие до установленного этапа; уведомление не считается подтверждением качества | Тест, план, владелец, срок разбора и сохранённый отчёт |
| Ошибка задания | Регрессионный прогон, когда несоответствие должно требовать исправления или подтверждённого разбора | Тест входит в согласованный набор, а команда проверила, что результат действительно отражается как ошибка CI | Ожидаемое состояние, фактический статус задания, ссылка на результатный пакет |
| Блокировка допуска | Релизный конвейер, если проверенный тест представляет риск для выпуска | Утверждены критерий блокировки, ответственный за исключение и порядок ручной проверки | Основание блокировки, решение владельца выпуска и причина возможного обхода |
PR, ночной регрессионный прогон и выпуск не обязаны использовать одинаковую политику. Для PR допустимо сначала показывать событие и собирать контекст, если тест пока не принят как обязательное условие слияния. Для регрессии команда может требовать разбора результата, даже если отдельный тест не блокирует каждый PR. Перед выпуском автоматическую блокировку следует назначать только для критериев, которые проверены на соответствующей задаче и согласованы ответственными за релиз.
Матрицу нужно дополнить полями «этап», «тип влияния», «владелец теста», «ответственный за решение», «требуемое действие» и «основание для исключения». Поля позволяют понять, что происходит после сигнала: кто разбирает событие, кто может разрешить продолжение и где остаётся подтверждение. Не задавайте предполагаемую долю ложных срабатываний или улучшения качества без данных собственной команды.
Инженерам Mac CI: проверка реального результата
Параметр Test Plan нельзя считать проверенным, пока не прослежена связь между настройкой и итогом задания. Внутренние требования к запуску тестов и интерпретации результатов помогут сопоставить результаты Xcode с данными выполнения; фактическое отображение статуса в конкретном CI всё равно проверяется отдельно.
Порядок испытания:
- Выберите небольшой представительный UI-сценарий, для которого владелец теста может объяснить ожидаемое поведение. Не начинайте проверку с набора, где одновременно меняются схема, план и окружение.
- Запишите точную версию Xcode, имя схемы, выбранный Test Plan, конфигурацию запуска и параметры назначения. Для проверки требований среды сверьтесь с официальной страницей системных требований Xcode.
- Запустите задание в изолированном или непроизводственном конвейере. Сохраните результатный пакет, журнал команды и итоговое состояние задания, не подменяя исходный результат ручным изменением статуса.
- Сопоставьте событие в UI-тесте с тем, как его классифицировал Xcode и какой результат получил сборочный шаг. Затем проверьте, как этот результат обработал CI-адаптер.
- Повторите сценарий после изменения настройки, сохранив те же условия. Если для сравнения меняются одновременно версия среды и логика задания, результат нельзя однозначно связать с Test Plan.
- Перед переносом правила в общие задачи попросите владельца теста и инженера CI подтвердить запись прогона и критерий итогового статуса.
В журнале приёмки указывайте не только слово «успешно» или «ошибка», но и исходное состояние теста, состояние команды, статус задания и идентификатор сохранённого отчёта. Если результаты расходятся, правило не следует распространять на другие конвейеры до выяснения причины. Так команда не смешивает проблему теста, настройку Xcode и обработку результата системой CI.
FAQ: параметры и последствия для конвейера
Где искать настройку серьёзности сбоя в Test Plan?
Откройте Test Plan, который действительно используется схемой в CI, и проверьте его конфигурацию тестирования. Затем сверьте название и доступность настройки с примечаниями к используемому релизу Xcode и текущим редактором плана. В записи прогона сохраните версию Xcode и имя плана: ссылка на настройку без этих сведений не позволяет воспроизвести проверку.
Нужно ли завершать CI ошибкой при любом сбое XCTest UI-теста?
Нет: решение зависит от проверенного сценария и назначения задания. Ожидаемое завершение приложения, дефект продукта и сбой самого процесса тестирования могут требовать разной реакции. До применения блокировки владелец теста подтверждает ожидаемый исход, а инженер CI проверяет, что статус задания соответствует принятому правилу. Иначе сигнал либо теряется, либо становится недифференцированной причиной остановки.
Могут ли PR и релиз использовать разные правила?
Могут, если правила заданы для соответствующих задач, а команда проверила результат на каждой ветке конвейера. Для PR может быть достаточно уведомления и назначенного разбора; выпуск может требовать блокировки при подтверждённом риске. Различие оформляют в матрице допуска, указывая тесты, владельцев и порядок исключения, а не оставляют в виде неявного расхождения настроек.
Как доказать, что параметр Test Plan меняет статус CI?
Проведите контролируемый запуск, сохраните план, журналы и результатный пакет, затем сопоставьте состояние теста с результатом xcodebuild и итогом задания CI. Используйте воспроизводимые условия и укажите окружение. Настройка подтверждена для политики только тогда, когда команда может объяснить всю цепочку результата; одно выбранное значение в редакторе Test Plan этого не доказывает.
Руководителям выпуска: ручная проверка и допуск
Автоматическая блокировка подходит для результата, который команда связала с утверждённым критерием допуска и проверила в релизном задании. Если связь не подтверждена, сигнал следует передать на ручной разбор с сохранением результата теста, журнала и ответственного за решение. Исключение из блокировки также требует владельца и документированного основания — иначе его невозможно проверить при следующем выпуске.
Для обработки нестандартного случая заранее определите, кто принимает решение: владелец теста объясняет ожидаемый исход, инженер CI подтверждает состояние задания, а ответственный за выпуск выбирает продолжение, повторную проверку или остановку. Распределение обязанностей не позволяет трактовать параметр Xcode как гарантию качества приложения и не перекладывает выпускное решение на отдельный флажок в Test Plan.
Любое изменение порога или поведения задания проходит согласование владельца конвейера и ответственного за выпуск. Сохраняйте старое правило, новое правило, причину изменения и результат контрольного запуска. Если доказательства противоречивы или отсутствует ответственный, безопаснее оставить изменение вне релизного конвейера до дополнительной проверки.
Техническим руководителям: запись для масштабирования
Для распространения политики на другие схемы нужна запись, по которой можно восстановить конфигурацию и принять то же решение. Минимальный состав: версия Xcode и системная среда, схема и Test Plan, представительский тест, ожидаемая классификация, результат тестового процесса, итог CI, ссылка на отчёт, владельцы и правило ручной проверки. Этот набор не заменяет контроль продукта, но делает решение о допуске проверяемым.
Не переносите правило на новые задачи только потому, что оно сработало на одном представительном тесте: различаться могут планы, конфигурации и способы получения статуса в CI. Сначала владельцы тестов подтверждают применимость сценария, затем инженер платформы проверяет задачу, а ответственный за выпуск принимает политику. Если хотя бы одна роль не может подтвердить свою часть, распространение откладывается.
Для команд, которым нужна отдельная среда для воспроизведения и приёмки Mac CI, полезно сначала описать требования к окружению и порядок проверки, а затем сопоставить их с вариантами удалённого доступа к Mac. Если проверка требует обработки артефактов тестирования, порядок их хранения и доступа следует согласовать с внутренними требованиями безопасности и политикой конфиденциальности.
Локальные Mac удобны, когда команде важны физический доступ к устройству и постоянный контроль над аппаратурой, но закупка, настройка и поддержка остаются на стороне организации. Общий собственный Mac снижает число отдельных машин, но требует управления доступом и очередью задач. Удалённая среда подходит для временной проверки и расширения ёмкости, однако до переноса релизного процесса нужно проверить доступ, хранение отчётов и поведение CI именно в нужном сценарии. Если команда хочет оценить такой вариант для контролируемого прогона, условия можно обсудить через обращение к ViewMini; совместимость конкретной конфигурации и результат тестов требуют предварительной проверки.
Часто задаваемые вопросы
Где в Xcode 27.2 задаётся серьёзность сбоя приложения во время UI-теста?
Проверьте настройки выбранного Test Plan и актуальные примечания к выпуску: доступность и подпись параметра следует сверять именно с установленной версией Xcode. Зафиксируйте название плана, конфигурацию и выбранное значение в записи прогона. Не переносите путь из старой инструкции без проверки — интерфейс и поддерживаемые параметры нужно подтвердить для используемой версии.
Должен ли сбой приложения в XCTest UI-тесте завершать CI ошибкой?
Не автоматически для всех тестов и этапов. Сначала установите, был ли сбой ожидаемой частью сценария, незапланированным поведением приложения или нарушением самого тестового процесса, а затем определите допустимый результат для конкретной задачи. На PR обычно важна быстрая обратная связь; для релизного допуска решающее значение имеют утверждённые критерии и проверенный результат CI.
Можно ли задать разные правила сбоя для PR и релизной сборки?
Да, если отдельные задания используют явно определённые планы или настройки и команда проверила фактическое отображение результата в каждой ветке конвейера. Разница должна быть документирована: какие тесты запускаются, кто отвечает за разбор и что блокирует слияние либо выпуск. Простое изменение порога без проверки сборочного адаптера не доказывает, что PR и релиз получат разные статусы.
Как подтвердить влияние серьёзности Test Plan на результат CI?
Запустите контролируемый UI-сценарий на изолированной задаче, сохраните результатный пакет и сопоставьте состояние теста с итогом команды и статусом задания CI. Запишите версию Xcode, используемый Test Plan, среду исполнения и конфигурацию конвейера. Повторите проверку после изменения настройки; единичный результат без отчёта и идентифицируемого окружения недостаточен для допуска политики.
Проверьте CI-гейт для UI-тестов на выделенном Mac ViewMini
Запускайте сборки и UI-тесты на выделенном физическом Mac с Apple Silicon, а не на виртуальной машине.
