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

В этом вся идея, и это та же идея, что и в отчёте об ошибке, только с другой стороны. Отчёт об ошибке говорит: “вот как заставить что-то сломаться”. Тест-кейс говорит: “вот как проверить, что всё идёт правильно”.

Из чего он состоит

Шесть частей, и интересны из них только три.

  • Идентификатор, чтобы на него можно было сослаться в отчёте о сборке или в разговоре
  • Заголовок, который говорит, что проверяется, а не куда кликают
  • Предусловия: состояние, в котором должен быть мир, чтобы первый шаг имел смысл
  • Шаги, пронумерованные, в каждом одно действие
  • Ожидаемый результат, достаточно конкретный, чтобы он мог оказаться неверным
  • Фактический результат, который заполняют при выполнении

Три части, от которых зависит, работает он или нет, - это предусловия, ожидаемый результат и заголовок. Шаги написать легко. Работа в том, чтобы понять, какое состояние тест предполагает и что значит “правильно” достаточно точно, чтобы об этом можно было спорить.

Как писать заголовок

Заголовок читают в списке из двухсот, поэтому он должен говорить, что именно проверяется.

Слабо
Проверить страницу входа
Лучше
Вход отклоняется, с сообщением, когда пароль неверный

Второй говорит вам, что он покрывает, что означал бы провал и дублирует ли он тот, что ниже. Первый не говорит ничего, и через полгода никто не вспомнит, покрывает он сообщение об ошибке или нет.

Как писать шаги

Пронумеруйте их и положите в каждый ровно одно действие. Тест - не то место, где стоит экономить.

Заголовок:   Вход отклоняется, с сообщением, когда пароль неверный
Предусловия: Для ada@example.com существует подтверждённый аккаунт
Шаги:
  1. Открыть /login
  2. Ввести ada@example.com в поле почты
  3. Ввести wrongpassword в поле пароля
  4. Нажать Войти
Ожидается:   Страница остаётся на /login, показывает "Почта или пароль неверны",
             и поле пароля очищено

Обратите внимание, чего ожидаемый результат не говорит: “появляется ошибка”. Этой фразе удовлетворяют три разные реализации, и две из них неправильные. Он ещё и называет то, чего произойти было не должно, а именно перехода, потому что тест, который проверяет только сообщение, пройдёт и на странице, которая показывает сообщение и всё равно пускает пользователя внутрь.

Что портит тест-кейс

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

Он проверяет шесть вещей. Когда он падает, вы узнаёте, что неверна одна из шести. Разделите его.

Он описывает интерфейс вместо поведения. “Нажать синюю кнопку справа сверху” ломается, когда кнопка переезжает; “Отправить форму” - нет.

Его ожидаемый результат - это пожатие плечами. “Работает корректно”, “как задумано”, “ошибок нет” - всё это значит, что решает тот, кто выполняет, а именно этого тест-кейс и должен избегать.

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

Ручные кейсы и автоматические

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

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

Когда кейс падает

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

Чего в нём нет, так это контекста машины, на которой он упал, - браузера, консоли, запросов за страницей. Это и есть разрыв между “тест-кейс 47 упал” и отчётом, с которым разработчик может работать.

Session Replay

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

Установить расширение

Приложите идентификатор кейса к отчёту, и эти двое останутся связаны: тот, кто чинит, сможет выполнить ту же проверку, а тот, кто выполнит проверку в следующем релизе, увидит, что она однажды падала. Остальное, что нужно такому отчёту, разобрано в руководстве по отчётам об ошибках.

Коротко

Одна проверка на кейс. Предусловия, которые он готовит сам. Шаги, по которым может пройти кто-то другой. Ожидаемый результат, настолько конкретный, что двое не смогут спорить, случился он или нет. Всё остальное - оформление.