Как тестировать push-шлюз (сервис push-уведомлений)?

«Как тестировать push-шлюз (сервис push-уведомлений)?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование push-шлюза (FCM, APNs, WebPush) включает проверку интеграции серверной части, клиентского приложения и самой службы доставки.

1. Тестирование серверного API (отправка уведомления):

  • Валидация запроса: Проверка обязательных полей (deviceToken, message, title), типов данных и лимитов размера.
  • Обработка ответов:

    // Пример теста на Node.js с использованием Jest
    it('should send push and return 200 for valid token', async () => {
        const mockResponse = { success: true, messageId: 'msg_123' };
        pushService.send = jest.fn().mockResolvedValue(mockResponse);
    
        const result = await sendPushNotification({
            token: 'valid_fcm_token',
            title: 'Hello',
            body: 'Test message',
            data: { screen: 'Home' } // deep link payload
        });
    
        expect(result.status).toBe('sent');
        expect(pushService.send).toHaveBeenCalledWith(
            expect.objectContaining({ token: 'valid_fcm_token' })
        );
    });
  • Обработка ошибок: Тестирование ответов шлюза на невалидные, устаревшие или несуществующие токены.
    it('should handle invalid token error', async () => {
        pushService.send = jest.fn().mockRejectedValue(
            new Error('Invalid registration token')
        );
        await expect(sendPushNotification({token: 'invalid'}))
            .rejects.toThrow('Invalid registration token');
    });

2. Тестирование клиентского приложения (получение и отображение):

  • Состояния приложения: Уведомление должно приходить и корректно обрабатываться, когда приложение:
    • Активно (foreground).
    • Свёрнуто (background).
    • Закрыто (terminated).
  • Действия по тапу: Проверка, что нажатие на уведомление открывает нужный экран (deep linking).
  • Кастомизация: Проверка отображения иконки, звука, вибрации.

3. Сквозное (E2E) тестирование и мониторинг:

  • Реальные устройства/эмуляторы: Использование инструментов вроде Appium для автоматизации проверки получения уведомления на эмуляторе Android/iOS.
  • Метрики доставки: Мониторинг ключевых показателей — процент успешной доставки, задержка (latency), количество открытий.
  • Условия сети: Тестирование при нестабильном соединении, переходе между Wi-Fi и мобильным интернетом.