Тестирование программного обеспечения
Тестовый пример и тестовый сценарий: Ключевые различия, примеры и когда использовать каждый из них
Сценарий говорит, что тестировать. Случай показывает, как именно. Используйте одну функцию сброса пароля — от требований до сценариев и полных тестовых примеров — и узнайте, насколько подробная информация действительно нужна вашей команде.
- Сценарий тестирования – это однострочное описание того, что необходимо проверить.
- Тестовый пример содержит шаги, данные и ожидаемый результат, показывающий, как его проверить.
- Один сценарий обычно создает несколько тестовых случаев.
- Сопоставьте детали с риском: легкие сценарии для быстрых команд, полные кейсы для критически важных или регламентированных работ.
Новые тестировщики часто слышат, как эти два термина используются так, как будто они означают одно и то же. Они этого не делают. Разница между тестовым сценарием и сценарием тестирования в основном заключается в уровне детализации, и понимание этого поможет вам решить, сколько написать, прежде чем приступить к тестированию.
В этом руководстве объясняется каждый из них, а затем рассматривается единая функция сброса пароля, от требований до сценариев и полных тестовых примеров. Функция и ее правила являются вымышленным примером. Терминология также немного различается в зависимости от команды и инструмента, поэтому договоритесь о том, что означают эти слова в вашей команде.
Короткий ответ
Сценарий тестирования описывает ситуацию, которую необходимо проверить, например «проверьте, может ли пользователь сбросить забытый пароль». Обычно это одна строка, а детали оставляется на усмотрение тестировщика.
Тестовый пример точно описывает, как проверить одно условие в этой ситуации: предварительные условия, шаги, тестовые данные и ожидаемый результат. Два тестировщика, следующие за ним, должны прийти к одному и тому же вердикту.
Подумайте о планировании поездки. Сценарий: «Путешествие из Пуны в Дели». Тестовый пример представляет собой полный маршрут с указанием номера рейса, времени вылета и действий на каждом этапе.
Тестовый пример и тестовый сценарий бок о бок
| Аспект | Тестовый сценарий | Тестовый пример |
|---|---|---|
| Ответ на вопрос | Что нам следует протестировать? | Как именно мы это проверим? |
| Деталь | Высокий уровень | Низкий уровень и специфичность |
| Типичная длина | Одна линия | Несколько полей и шагов |
| Получено из | Требования, пользовательские истории | Тестовые сценарии |
| Включает тестовые данные? | Редко | Да |
| Включает ожидаемый результат? | Подразумеваемый | Да, явно |
| Время писать | Минуты | Гораздо дольше |
| Техническое обслуживание | Низкий | Выше, потому что детали меняются |
| Свобода тестировщика | Высокий | Низкий |
| Лучшее для | Обзор покрытия, быстрые команды | Критические потоки, аудиты, передачи |
Что такое тестовый сценарий?
Сценарий тестирования — это краткое описание того, что может сделать пользователь, или ситуации, с которой должна справиться система. Он фокусируется на том, что важно снаружи, и обычно исходит непосредственно из требований или пользовательской истории.
Сценарии ценны, потому что они быстры. Вы можете перечислить тридцать за время, необходимое для написания трех подробных кейсов, что делает их отличным способом просмотреть освещение с владельцем продукта: «Все ли мы продумали?» Нетехнический читатель может без проблем следовать списку сценариев.
Что такое тестовый пример?
Тестовый пример — это набор конкретных условий и шагов, используемых для определения того, работает ли что-то. Типичный тестовый пример содержит:
- Уникальный ID и четкое название
- Предварительные условия, означающие, что должно быть верно, прежде чем вы начнете.
- Пронумерованы шаги
- Конкретные данные испытаний
- Ожидаемый результат
- Фактический результат и статус, заполняемые при запуске.
Тест-кейсы хороши, когда важна последовательность. Их может запускать новый член команды, результаты можно сравнивать между выпусками, и у вас есть запись о том, что было проверено. Мы углубимся в наше руководство о том, как писать тестовые примеры.
Одна особенность, от начала до конца
Шаг 1: Требование
Пользователи, забывшие свой пароль, могут запросить ссылку для сброса по электронной почте. Ссылка работает один раз и истекает через 30 минут. Новый пароль должен иметь длину не менее 8 символов.
Шаг 2. Тестовые сценарии
| идентификатор | Тестовый сценарий |
|---|---|
| ТС-01 | Убедитесь, что зарегистрированный пользователь может сбросить пароль, используя ссылку, отправленную по электронной почте. |
| ТС-02 | Проверьте поведение, когда адрес электронной почты не зарегистрирован |
| ТС-03 | Убедитесь, что ссылку с истекшим сроком действия нельзя использовать |
| ТС-04 | Убедитесь, что ссылку нельзя использовать дважды |
| ТС-05 | Убедитесь, что правила нового пароля соблюдаются. |
Посмотрите TS-02. В требовании никогда не говорится, что должно произойти с неизвестным электронным письмом, и написание сценария выявило этот пробел. Должна ли страница показывать, что адрес не зарегистрирован? В целях безопасности обычно этого делать не следует, поскольку это позволяет злоумышленникам обнаружить действительные учетные записи. Нахождение этих вопросов на ранней стадии — одно из самых больших преимуществ написания сценариев.
Шаг 3. Тестовые примеры
Теперь мы расширяем только TS-05 на тестовые примеры. Один сценарий превращается в несколько:
| идентификатор | Название | Данные испытаний | Ожидаемый результат |
|---|---|---|---|
| ТС-051 | Принимает пароль длиной ровно 8 символов | abcd1234 |
Пароль изменится и появится подтверждение |
| ТС-052 | Отклоняет пароль из 7 символов | abcd123 |
Ошибка: необходимо не менее 8 символов. |
| ТС-053 | Отклоняет пустой пароль | (blank) | Ошибка: требуется пароль |
| ТК-054 | Отклоняет несовпадающее подтверждение | abcd1234, abcd9999 |
Ошибка: пароли не совпадают |
Эти значения не были случайными. TC-051 и TC-052 находятся по обе стороны от предела, используя анализ граничных значений, а остальные получаются с помощью эквивалентного разделения.
Шаблон тестового примера
Вот TC-052 выписан полностью. Скопируйте этот макет, если у вашей команды еще нет стандарта:
ID: TC-052
Title: Reset rejects a password of 7 characters
Scenario: TS-05 New password rules are enforced
Priority: High
Preconditions: Account asha@example.com exists
A valid, unused reset link has been requested
Test data: New password: abcd123
Steps:
1. Open the reset link from the email
2. Enter abcd123 in New password
3. Enter abcd123 in Confirm password
4. Click Reset password
Expected: Error "Password must be at least 8 characters"
Password is unchanged, and the link stays valid
Actual: (filled in during the run)
Status: (Pass / Fail / Blocked)
Обратите внимание, что ожидаемый результат проверяет больше, чем сообщение об ошибке. Это также подтверждает, что старый пароль по-прежнему работает и ссылка остается пригодной для использования. Слабые тестовые примеры часто ограничиваются тем, что видно на экране.
Совет. Проверьте одно условие в каждом тестовом примере. Если дело, охватывающее пять вещей, потерпит неудачу, вы не будете знать, какая из них сломалась. Короткие, целенаправленные дела также гораздо легче автоматизировать позже.
Где они вписываются в общую картину
| Уровень | Ответы | Пример |
|---|---|---|
| Стратегия тестирования | Каков наш общий подход? | Автоматизируйте регрессию, изучайте новые возможности |
| План испытаний | Что мы будем делать для этого релиза? | Возможности аккаунта, протестированные с 3 по 7 марта. |
| Тестовый сценарий | Что мы будем проверять? | Правила пароля соблюдаются |
| Тестовый пример | Как мы это проверим? | TC-052 и его этапы |
| Тестовый скрипт | Как машина это проверит? | Автоматизированный код для TC-052 |
Традиционно сценарии и случаи пишутся на этапе разработки тестов жизненного цикла тестирования программного обеспечения.
Когда использовать каждый
Сценариев часто бывает достаточно, когда:
- Команда небольшая, опытная и хорошо знает продукт.
- Времени мало, или требования часто меняются.
- Особенность – низкий риск.
- Вы хотите быстро просмотреть освещение с заинтересованными сторонами.
- Вы руководите исследовательским тестированием.
Подробные тестовые примеры стоят затраченных усилий, если:
- Сбой будет дорогостоящим, как и в случае с платежами, безопасностью или данными о состоянии здоровья.
- Регулирующим органам или аудиторам нужны доказательства того, что было протестировано.
- Новые или привлеченные тестировщики должны запускать тесты.
- Результаты должны повторяться точно, как в наборе регрессий.
- Эти шаги станут автоматическими тестами.
Большинство зрелых команд используют оба. Они перечисляют сценарии для всего, а полные кейсы пишут только для самых высоких рисков. Нет необходимости документировать каждый шаг страницы настроек с низким уровнем риска так же, как банковский перевод.
Сценарии, кейсы и автоматизация
Хорошо написанный тестовый пример почти напрямую соответствует автоматизированному тесту. Предварительные условия становятся установками, шаги — действиями, а ожидаемый результат — утверждением. Среды разработки, основанные на поведении, даже используют слово «сценарий» для своих исполняемых спецификаций:
Scenario: Reset rejects a short password
Given I have opened a valid reset link
When I submit the new password "abcd123"
Then I see "Password must be at least 8 characters"
And my password is unchanged
Как ни странно, то, что BDD называет сценарием, гораздо ближе к тестовому примеру, поскольку имеет конкретные данные и результаты. Это хорошее напоминание о необходимости договориться об условиях. Чтобы автоматизировать эти проверки, ознакомьтесь с нашим руководством по драматургу или руководством по pytest.
Чем они хороши
| Хороший сценарий | Хороший тестовый пример |
|---|---|
| Описывает цель или ситуацию пользователя. | Проверяет одно конкретное условие |
| Ссылки на требование | Имеет точный ожидаемый результат |
| Охватывает как неудачи, так и успех | Перечисляет его предварительные условия и данные. |
| Не имеет ненужных деталей | Может управлять кем-то новым |
| Вписывается в одну строку | Не зависит от других тестов |
Распространенные ошибки
- Написание только удачных путей. Большинство ошибок связано с условиями ошибки, поэтому включите то, что должно привести к сбою.
- Использование расплывчатых ожидаемых результатов. «Все должно работать правильно» позволяет любому тестировщику решить что угодно.
- Полное документирование всего. Тысячи случаев, которые никто не поддерживает, хуже небольшого полезного набора.
- Пропуск сценариев. Если сразу перейти к делу, можно забыть о целых областях.
- Пусть дела устареют. Когда продукт меняется, старые дела вводят людей в заблуждение. Регулярно просматривайте их.
- Связывание шагов с хрупкими деталями. «Нажмите синюю кнопку вверху» не работает при любом редизайне.
Итоги
Сценарии дают вам широту, а тестовые примеры — глубину. Начните со сценариев для вашей следующей функции и рассмотрите их вместе с разработчиком и владельцем продукта. Затем разложите только рискованные дела на полные. Вы обнаружите пробелы раньше и потратите время на написание текста там, где оно имеет значение.
Часто задаваемые вопросы
В чем основное отличие тестового примера от тестового сценария?
Сценарий тестирования — это высокоуровневое описание того, что тестировать. Тестовый пример дает конкретные шаги, данные и ожидаемый результат для его тестирования.
Что первично: тестовый сценарий или тестовый пример?
Обычно сценарий. Сценарии создаются на основе требований, затем на основе сценариев, требующих более подробной информации, пишутся тестовые примеры.
Сколько тестовых случаев имеет один сценарий?
Фиксированного номера нет. Это зависит от правил и рисков, и типичный сценарий может иметь несколько вариантов, охватывающих успех, неудачу и границы.
Нужны ли Agile-командам подробные тестовые примеры?
Не всегда. Многие полагаются на сценарии, критерии приемки и автоматизацию и сохраняют подробные случаи только для критически важных потоков или требований соответствия.
Является ли тестовый сценарий тем же, что и тестовый пример?
Не совсем. Тестовый пример описывает, что проверять, тогда как тестовый сценарий обычно представляет собой код, который выполняет эти проверки автоматически, хотя некоторые команды используют эти термины свободно.
Продолжайте учиться
Нужна помощь с тестированием, WordPress или SEO?
Мы помогаем командам выпускать лучшее программное обеспечение и развивать свои сайты. Расскажите нам, над чем вы работаете, и мы предложим четкий следующий шаг.
Больше руководств по тестирование, искусственный интеллект и современные разработки
Понравилась эта статья? Выберите тему и сразу приступайте к нашим новейшим руководствам.
Объяснение галлюцинаций искусственного интеллекта: почему языковые модели все выдумывают и как их уменьшить
Галлюцинации ИИ объяснили: что это такое, почему языковые модели их создают, распространенные типы, как уменьшить их с помощью заземления и подсказо…
Читать статью →DevOpsОбъяснение переменных среды: файлы .env, секреты и правильно выполненная конфигурация
Переменные среды объясняются на примерах Python, которые мы запускали: их чтение и установка, почему каждое значение является строкой, файлы .env, н…
Читать статью →Разработка ПООбъяснение ограничения скорости API: алгоритмы, заголовки и обработка ошибок 429
Ограничение скорости API объясняется с помощью проведенного нами моделирования: сегмент токенов, фиксированное окно, скользящее окно, 429 ответов, з…
Читать статью →Автоматизация тестированияИздевательство в Python: unittest.mock, патч и ошибки, из-за которых тесты лгут
Издевательство на Python с помощью unittest.mock, протестировано: Mock и return_value, Side_effect, исправление использования имени, спецификация и …
Читать статью →Тестирование ПООбъяснение покрытия кода: покрытие линий или ветвей и что на самом деле означает 100%
Покрытие кода объяснено с помощью реального запуска покрытия.py: покрытие строк, ветвей и условий, чтение отчета, почему 100%-ное покрытие все еще м…
Читать статью →Базы данных и SQLDELETE, TRUNCATE и DROP в SQL: различия, откат и когда использовать каждый из них
Объяснение DELETE, TRUNCATE и DROP на примере протестированного SQL: что каждый из них удаляет, откат, триггеры, сброс идентификаторов, скорость и ч…
Читать статью →Базы данных и SQLОбъяснение представлений SQL: создавайте, используйте и избегайте ловушек, с примерами
Представления SQL, объясненные с помощью запросов, которые мы выполняли: создание представления, результаты в реальном времени, скрытие столбцов, пр…
Читать статью →Разработка ПОИнтерфейс TypeScript и тип: реальные различия, протестированные с помощью компилятора
Интерфейс TypeScript против типа, проверенный реальным компилятором: что могут делать оба, что может делать только один, слияние объявлений, расшире…
Читать статью →Разработка ПООбъяснение Python *args и **kwargs: гибкие функции с понятными примерами
Python *args и **kwargs, объясненные с помощью кода, который мы запускали: упаковка и распаковка, порядок параметров, аргументы только по ключевым с…
Читать статью →Разработка ПОЛямбда-функции Python: синтаксис, реальное использование и когда их не следует использовать
Лямбда-функции Python, объясненные с помощью кода, который мы запускали: синтаксис, сортировка с помощью ключа, карты и фильтра, замыкания, ловушка …
Читать статью →Искусственный интеллектЧто такое ИИ-агенты? Как они работают: можно запустить простой цикл агента
Что такое агенты ИИ? Простое руководство по циклу агента, инструментам, памяти и ограничениям, с небольшим циклом Python, который мы запустили, реал…
Читать статью →DevOpsМониторинг и наблюдаемость: реальная разница с журналами, метриками и трассировками
Объяснение мониторинга и наблюдаемости: известные и неизвестные сбои, журналы, метрики и трассировки, пошаговое руководство по инцидентам при оформл…
Читать статью →DevOpsDocker Volumes против Bind Mounts: правильное сохранение данных контейнера
Объяснение томов Docker и монтирования привязки: почему исчезают данные контейнера, именованные тома, монтирование привязки, tmpfs, примеры создания…
Читать статью →Автоматизация тестированияTDD против BDD: ключевые различия, одна функция, созданная для обоих способов, и когда использовать каждый
TDD и BDD объясняются с помощью одной функции скидки, созданной в обоих направлениях: красно-зеленый рефакторинг с кодом, который мы запускали, сцен…
Читать статью →Тестирование ПОПользовательское приемочное тестирование (UAT): процесс, контрольный список и реальные примеры
Приемочное тестирование пользователей объяснило: кто его проводит, чем оно отличается от контроля качества, семиэтапный процесс, шаблон тестового сц…
Читать статью →Базы данных и SQLОбъяснение значений NULL в SQL: IS NULL, COALESCE, NULLIF и ловушки, которых следует избегать
Значения SQL NULL объяснены с помощью запросов, которые мы выполнили: трехзначная логика, IS NULL, COALESCE, NULLIF, как агрегаты, соединения и сорт…
Читать статью →Базы данных и SQLОператор SQL CASE WHEN: синтаксис, реальные примеры и распространенные ошибки
SQL CASE WHEN объяснен с помощью запросов, которые мы выполняли: простые формы и формы для поиска, порядок условий, повороты с помощью SUM, трюки CO…
Читать статью →Разработка ПОЧто такое JWT? Веб-токены JSON, объясненные на рабочем примере
Что такое JWT? Объяснение JSON Web Tokens: три части: токен, созданный и измененный в коде, который мы запускали, JWT и сеансы, хранилище, токены об…
Читать статью →Разработка ПООбъяснение цикла событий JavaScript: стек вызовов, микрозадачи и таймеры с примерами
Цикл событий JavaScript объясняется с помощью кода, который мы запускали: стек вызовов, очереди задач и микрозадач, почему setTimeout 0 не является …
Читать статью →Разработка ПОГенераторы Python и объяснение доходности: экономьте память с помощью реальных примеров
Генераторы Python и доходность, объясненные с помощью кода, который мы запускали: как они приостанавливаются и возобновляются, измеряют экономию пам…
Читать статью →Искусственный интеллектЧто такое вложения? Простое объяснение векторов и косинусного сходства
Что такое вложения? Простое руководство по векторам, косинусному подобию и семантическому поиску с небольшим примером, который мы использовали, общи…
Читать статью →DevOpsСине-зеленое и канареечное развертывание: различия, компромиссы и как выбрать
Объяснение сине-зеленого и канареечного развертывания: как каждый из них работает, стоимость, риски и откат, стабильное группирование пользователей,…
Читать статью →Автоматизация тестированияНенадежные тесты: что их вызывает и как их исправить навсегда
Ненадежные тесты объясняются на демонстрациях, которые мы запускали: основные причины, способы подтверждения и диагностики, правильные исправления в…
Читать статью →Тестирование ПОНагрузочное тестирование и стресс-тестирование: различия, метрики и примеры k6
Объяснение нагрузочного и стресс-тестирования: что доказывает каждое из них, тесты на всплески и выдержки, важные метрики, почему средние значения в…
Читать статью →Тестирование ПОТестовый пример и тестовый сценарий: ключевые различия, примеры и когда использовать каждый
Объяснение тестового случая и тестового сценария: четкие определения, параллельная таблица, одна функция сброса пароля, взятая из сценариев в случаи…
Читать статью →Базы данных и SQLОптимизация SQL-запросов: чтение планов выполнения и исправление медленных запросов с указанием времени
Оптимизация SQL-запросов проверена на миллионе строк: читайте планы выполнения, добавляйте правильные индексы, исправляйте неразмещаемые фильтры, ис…
Читать статью →Базы данных и SQLSQL UNION против UNION ALL: различия, примеры и проверка производительности
SQL UNION и UNION ALL объяснены с помощью запросов, которые мы выполнили: дубликаты, правила, которым следуют оба, реальная ошибка данных, измеренна…
Читать статью →Разработка ПОУчебное пособие по API JavaScript Fetch: GET, POST, обработка ошибок и тайм-ауты
Учебное пособие по API JavaScript Fetch, протестированное на локальном сервере: GET и POST, почему не выдается ошибка 404, многоразовый помощник, ст…
Читать статью →Разработка ПООбработка файлов Python: чтение, запись, CSV, JSON и pathlib с примерами
Обработка файлов Python объясняется с помощью кода, который мы запускали: открытые режимы, чтение больших файлов, CSV, JSON, pathlib, двоичные файлы…
Читать статью →Разработка ПОКлассы и объекты Python: учебник ООП с реальными примерами
Классы и объекты Python, объясненные с помощью кода, который мы запускали: __init__, методы, атрибуты класса и экземпляра, наследование, свойства, м…
Читать статью →Искусственный интеллектЧто такое большая языковая модель? Как работают LLM, объяснено без шумихи
Что такое большая языковая модель? LLM объясняется простым языком: токены, встраивания, внимание, обучение, температурные и контекстные окна, крошеч…
Читать статью →DevOpsКоманды Linux для начинающих: основное руководство по терминалу с примерами
Команды Linux для начинающих, сгруппированные по задачам: навигация, файлы, просмотр журналов, grep, каналы, разрешения, процессы и архивы, с практи…
Читать статью →Автоматизация тестированияSelenium vs Playwright: ключевые различия, сравнение кода и что выбрать
Сравнение Selenium и Playwright: архитектура, ожидание, поддержка браузера и языка, отладка, одинаковый тест в обоих инструментах, советы по миграци…
Читать статью →Тестирование ПОРазделение эквивалентности: метод проектирования тестов, объясненный на рабочих примерах
Объяснение эквивалентного разделения: как найти действительные и недействительные разделы, рабочие примеры для возрастов, паролей и купонов, проведе…
Читать статью →Тестирование ПОСерьезность и приоритет в тестировании программного обеспечения: различия, матрица и реальные примеры
Объяснение серьезности и приоритета при тестировании программного обеспечения: четкие определения, четырехсторонняя матрица с примерами, шкалы уровн…
Читать статью →Базы данных и SQLУчебное пособие по подзапросам SQL: типы, коррелирующие подзапросы и EXISTS с примерами
Руководство по подзапросам SQL с выполненными нами запросами: скалярные подзапросы, IN, FROM и SELECT, коррелированные подзапросы, EXISTS, ловушка N…
Читать статью →Базы данных и SQLОбъяснение транзакций SQL и ACID: COMMIT, ROLLBACK и уровни изоляции
Транзакции SQL и ACID, объясненные с помощью банковского перевода, который мы выполнили: COMMIT, ROLLBACK, точки сохранения, блокировки, уровни изол…
Читать статью →Разработка ПОGit merge vs rebase: отличия, примеры и когда что использовать
Git merge vs rebase с реальным выводом log, сравнительной таблицей, золотым правилом rebase и безопасным рабочим процессом для команды.
Читать статью →Разработка ПОГенераторы списков в Python: синтаксис, примеры и когда их избегать
Генераторы списков в Python: синтаксис, фильтры, if-else, вложенные циклы, измеренное время и случаи, когда обычный цикл for лучше.
Читать статью →Базы данных и SQLSQL JOIN: объяснение с примерами (Inner, Left, Right, Full)
Разберите SQL JOIN шаг за шагом на примерах таблиц и запросов: INNER, LEFT, RIGHT, FULL, CROSS и SELF, а также частые ошибки и советы по производите…
Читать статью →