QA The Other WayОбеспечение качества в эпоху тестов, написанных искусственным интеллектом. QA The Other Way.
Практическое QA

Тег выбирает тесты, но не доказывает покрытие.

Считайте фильтры явным договором отбора и указывайте исключённые случаи.

5 мин. чтенияQA The Other Way
Авторская схема отбора с включёнными и исключёнными тестами.
Авторская редакционная иллюстрация.
Иллюстративное видео к этой статье. английский экранный текст; выберите субтитры для этого языка.

Переведенное издание. Технические идентификаторы остаются в своей первоначальной форме.

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

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

Руководство следует документации аннотаций Playwright с двумя вымышленными локальными тестами: для небольшой проверки и широкой инспекции. Нет утверждений о реальном конвейере или проценте покрытия. Сначала показываем состав.

Определите значение тега

Playwright допускает теги в деталях или названии. Они начинаются с @ и фильтруют тесты. Командная договорённость должна кратко объяснять назначение, например согласованный набор для конкретного барьера изменений.

@critical не должен означать мнение последнего автора. Назовите владельца правила, включённые сценарии и осознанные исключения. Добавить строку легко; обосновать членство сложнее.

import { test, expect } from '@playwright/test';

test('demo title contract', { tag: '@demo-review' }, async () => {
  expect('Demo review').toBe('Demo review');
});

test('demo archive contract', { tag: '@demo-wide' }, async () => {
  expect(['draft', 'archive']).toContain('archive');
});

Примеры показывают метаданные и отбор, не приложение или полезное продуктовое покрытие. Выведите список до запуска:

npx playwright test demos/selection.spec.mjs --grep @demo-review --list

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

Отделите отбор от пропуска и ожидаемой ошибки

skip и fixme не запускаются. fail запускается с ожидаемой ошибкой; неожиданный успех сообщается. Это не отсутствие из-за фильтра.

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

Фокус тоже ограничивает набор: при наличии сфокусированных тестов выполняются только они. Локальная отладка не должна незаметно сужать общий запуск. Проверяйте изменение отбора вместе с кодом.

Проверяйте состав при изменениях

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

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

Используйте результат в его пределах

Малый барьер даёт быстрый ответ, пока широкий набор работает отдельно. Это план, не доказательство обнаружения всего. Разделение определяет риск продукта; пересматривайте его с новыми функциями и сбоями.

AnyTest описывает агентов, открывающих сценарии и создающих тесты для ревью. Проверяйте место теста в наборе и его проверки. Интерфейс тегов AnyTest не заявляется. Честный результат не заимствует уверенность у невыполненных тестов.

Общие вопросы

Доказывает ли зелёный набор по тегу полное покрытие?

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

Равен ли отфильтрованный тест пропущенному?

Нет. Отбор, skip/fixme и ожидаемая ошибка - разные состояния отчёта.

Источники