← Назад к вопросам

Проведи негативное тестирование на примере домофона

1.8 Middle🔥 161 комментариев
#Веб-тестирование#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Негативное тестирование домофона: подход и примеры

Негативное тестирование — это проверка системы на устойчивость к нестандартным, ошибочным или вредоносным действиям. Цель — убедиться, что устройство корректно обрабатывает сбои, не ломается и не создаёт опасных ситуаций. Для домофона это критически важно, так как он работает в публичном пространстве и должен быть максимально отказоустойчивым.

Основные направления негативного тестирования домофона

  • Некорректный ввод данных:
    *   Ввод букв вместо цифр в номер квартиры.
    *   Ввод спецсимволов (например, `#`, `*`, `!`) в любые поля.
    *   Ввод чрезмерно длинного номера квартиры (более 10 цифр).
    *   Попытка позвонить на несуществующий номер квартиры (например, 999 в 9-этажном доме).
    *   Многократное быстрое нажатие одной и той же кнопки.

  • Нарушение последовательности действий (тестирование состояний):
    *   Попытка открыть дверь до того, как абонент ответил на вызов.
    *   Набор номера квартиры во время уже идущего звонка.
    *   Одновременный вызов с нескольких панелей домофона (если их несколько).
    *   Быстрое прерывание вызова (сброс) и немедленный новый вызов.

  • Экстремальные условия эксплуатации:
    *   Работа при критически низких и высоких температурах (например, -30°C и +50°C).
    *   Воздействие прямой влаги (дождь, конденсат) на кнопки и микрофон/динамик.
    *   Сильные вибрации или удары по корпусу.
    *   Работа при нестабильном или пониженном напряжении в сети.

  • Проверка на безопасность и устойчивость:
    *   Длительное (5-10 минут) удержание кнопки вызова или открытия двери.
    *   Попытка "переполнить буфер", быстро набирая номера или нажимая кнопки в течение длительного времени.
    *   Проверка, не приводит ли одновременное нажатие комбинации кнопок к сбросу настроек или получению несанкционированного доступа.
    *   Тестирование помехоустойчивости аудиоканала (сильный шум, свист, крик в трубку).

Пример сценария негативного тестирования

Цель: Проверить реакцию системы на ввод несуществующего номера квартиры с последующим быстрым повторным вводом.

Предусловия: Домофон находится в основном меню ("Введите номер квартиры").

Шаги теста:

  1. Набрать на клавиатуре номер квартиры, который заведомо не существует в системе (например, 000 или 999).
  2. Нажать кнопку вызова.
  3. Зафиксировать реакцию системы (ожидаемо: звуковой сигнал "ошибка" или сообщение "Квартира не найдена", возврат в главное меню).
  4. Не дожидаясь полного возврата в меню, немедленно снова набрать другой несуществующий номер (например, 888) и нажать вызов.
  5. Повторить п.4 5-10 раз подряд в быстром темпе.

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

Негативные сценарии, которые мы здесь проверяем:

  • Обработка неверных данных.
  • Устойчивость к "спам-атаке" ошибочными командами.
  • Сохранение корректного состояния конечного автомата (state machine) устройства после серии ошибок.

Пример кода для автоматизации простой проверки (Python + pytest)

import pytest
import time

# Предполагаем, что у нас есть класс для эмуляции взаимодействия с домофоном
from domophone_emulator import DomophoneEmulator

class TestDomophoneNegative:

    @pytest.fixture
    def domophone(self):
        # Инициализация эмулятора или подключение к тестовому стенду
        return DomophoneEmulator()

    def test_rapid_invalid_calls(self, domophone):
        """Быстрые последовательные вызовы на несуществующие номера."""
        invalid_numbers = ["000", "999", "abc", "1234567890", ""]

        for invalid_num in invalid_numbers:
            # Шаг 1: Ожидаем главное меню (таймаут на случай зависания)
            assert domophone.wait_for_state("main_menu", timeout=5), "Домофон завис в предыдущем цикле"

            # Шаг 2: Вводим неверный номер и вызываем
            domophone.enter_code(invalid_num)
            domophone.press_call_button()

            # Шаг 3: Проверяем, что вызов не прошёл
            # Должно появиться сообщение об ошибке ИЛИ не должно быть состояния "calling"
            time.sleep(0.5)  # Небольшая задержка на обработку
            current_state = domophone.get_current_state()
            assert current_state != "calling", f"Домофон почему-то звонит по номеру {invalid_num}"
            # Допустим, корректная реакция - состояние 'error' или возврат в 'main_menu'
            assert current_state in ["error", "main_menu"], f"Неожиданное состояние {current_state} после ввода {invalid_num}"

        # Финальная проверка: после всех ошибок система должна работать
        domophone.enter_code("101")  # Валидный номер
        domophone.press_call_button()
        assert domophone.wait_for_state("calling", timeout=3), "Система не работает после серии негативных сценариев"

Вывод: Негативное тестирование домофона фокусируется на его отказоустойчивости и безопасности. Оно имитирует действия невнимательных, неопытных или злонамеренных пользователей, а также проверяет работу в неидеальных условиях. Такой подход позволяет выявить критические дефекты, которые в реальной эксплуатации могли бы привести к поломке устройства, несанкционированному доступу или просто к недовольству пользователей.