Assurance qualité manuelleIngénieur QA Manuel

Élaborez un cadre de test manuel rigoureux pour valider la continuité de session et la synchronisation d'état dans une application web progressive utilisant **Service Workers** pour des capacités hors ligne, **Background Sync API** pour des mutations différées, et **IndexedDB** pour le stockage côté client, ciblant spécifiquement les stratégies d'invalidation du cache lors de mises à jour forcées, la résolution de conflits lorsque plusieurs instances de dispositifs modifient des données de panier partagées, et la dégradation silencieuse lorsque la prévention intelligente du suivi de **Safari** purge le stockage.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse à la question.

Historique de la question

Les applications web progressives (PWA) brouillent la frontière entre les applications natives et web en utilisant des Service Workers pour intercepter les requêtes réseau et mettre en cache des ressources pour une utilisation hors ligne. Les premières méthodologies de test web supposaient une connectivité continue, mais les applications modernes doivent fonctionner en mode avion, dans les tunnels de métro et dans les zones rurales sans connectivité. Cette évolution a introduit des défis complexes de gestion d'état où les bases de données côté client comme IndexedDB agissent comme la principale source de données plutôt qu'un tampon temporaire, nécessitant de nouvelles approches de validation qui tiennent compte des politiques d'éviction de stockage des navigateurs et des files d'attente de synchronisation asynchrones.

Le problème

Les tests manuels traditionnels se concentrent sur la validation fonctionnelle dans des conditions réseau idéales, manquant souvent des modes de défaillance critiques tels que les conditions de concurrence lors des mises à jour du cache, la perte de données silencieuses lorsque Safari purge le stockage, ou les boucles de réessai infinies dans Background Sync API qui drainent les batteries des dispositifs. Les testeurs doivent valider non seulement le "chemin heureux" de l'utilisation hors ligne, mais aussi les conflits de fusion qui surgissent lorsque plusieurs instances de dispositifs modifient le même panier ou document lors de partitions réseau. De plus, la gestion du cycle de vie du Service Worker introduit des complexités uniques où les mises à jour peuvent rester en attente indéfiniment si elles ne sont pas correctement déclenchées, laissant les utilisateurs bloqués sur des versions d'application obsolètes.

La solution

Une méthodologie complète nécessite d'orchestrer des scénarios de test multi-dispositifs à l'aide de proxies réseaux programmables pour simuler une connectivité intermittente, tout en surveillant le panneau Application de Chrome DevTools pour l'état du Service Worker et les mutations de IndexedDB. Les testeurs doivent exécuter des tests de "pression de stockage" en remplissant artificiellement la capacité des dispositifs pour déclencher le traitement de QuotaExceededError, et effectuer des tests de longévité s'étendant sur plusieurs jours pour vérifier que la Prévention Intelligente du Suivi de Safari ne purge pas prématurément les données critiques de l'utilisateur. De plus, la validation des algorithmes de résolution des conflits nécessite des actions simultanées à travers différents navigateurs hétérogènes pour garantir la cohérence opérationnelle entre l'implémentation de Background Sync de Chrome et les politiques de stockage plus restrictives de Safari.

Situation vécue

Le Problème

Un PWA de commerce électronique a signalé des plaintes sporadiques où les utilisateurs perdaient leurs paniers après avoir basculé entre des dispositifs mobiles et de bureau, ou après des mises à jour d'application qui n'avaient pas réussi à rafraîchir les caches du catalogue de produits. L'enquête a révélé que le Service Worker servait des coquilles HTML obsolètes depuis CacheStorage, tandis que IndexedDB contenait l'état du panier qui ne se synchronisait pas à cause d'événements Background Sync abandonnés lorsque les utilisateurs forçaient la fermeture du navigateur. De plus, les utilisateurs de iOS Safari sur iOS 16 ont connu une perte totale de données après sept jours d'inactivité en raison des politiques de Prévention Intelligente du Suivi, mais l'application manquait de mécanismes de secours pour détecter cette éviction silencieuse.

Solution 1 : Tests de dispositifs isolés

Cette approche consiste à valider chaque dispositif indépendamment dans des profils de navigateur propres sans interférence réseau. L'avantage principal est l'exécution simple à l'aide des DevTools de navigateur standard, accompagnée d'étapes reproductibles facilement documentées. Cependant, cette méthode ne capture pas les conditions de concurrence dépendantes du temps lorsque deux clients tentent simultanément de synchroniser des modifications de panier conflictuelles, et elle ignore complètement les contraintes de stockage uniques de Safari qui ne se manifestent que dans des modèles d'utilisation réels. Par conséquent, cette approche a été rejetée comme méthodologie principale car elle produisait de faux négatifs concernant la logique de résolution de conflits.

Solution 2 : Réduction automatique du réseau

La réduction automatique du réseau utilise des scripts Puppeteer ou Playwright pour simuler des états hors ligne de manière programmatique avec un contrôle précis sur la latence. Bien que cela offre une haute répétabilité pour les tests de régression, cela ne peut pas reproduire les heuristiques d'éviction de stockage propriétaires de Safari ou les actions "Effacer l'historique" initiées par l'utilisateur. De plus, les scripts automatisés manquent des comportements liés à la batterie comme la réduction de rétrogradation des réessais de Background Sync dans des conditions de faible puissance. Cette solution a été adoptée pour des tests de validation, mais jugée insuffisante pour la certification de version en raison de son incapacité à modéliser les contraintes des dispositifs réels.

Solution 3 : Laboratoire de Chaos Contrôlé

Le laboratoire de chaos contrôlé établit un laboratoire de dispositifs physique avec des routeurs Wi-Fi programmables fonctionnant sous Linux tc pour injecter des pertes de paquets, combiné avec des protocoles de tests manuels synchronisés à travers des dispositifs iPhone, Android, et Bureau. Cette approche fournit une réplication authentique des partitions réseau et de la pression de stockage tout en permettant de tester le comportement réel de l'ITP de Safari sur de longues périodes. Elle valide également l'interface utilisateur de résolution de conflits en temps réel lorsque deux testeurs modifient simultanément le même élément de panier. Bien que nécessitant des ressources importantes, cela a été sélectionné car cela a mis au jour un défaut critique où Background Sync mettait en file d'attente des demandes de paiement en double lors de connectivités instables, causant des doubles facturations que les tests synthétiques ont manqués.

Le Résultat

Suite à la mise en œuvre de cette méthodologie, l'équipe a introduit un algorithme d'horodatage "Last-Modified" pour la fusion des paniers et ajouté un badge "Sync Pending" persistant visible sur tous les dispositifs. Une clé d'idempotence côté serveur a été introduite pour empêcher les frais en double lors des événements réessayés de Background Sync. Après le déploiement, les taux d'abandon de panier ont chuté de quarante pour cent, et aucune plainte de transaction en double n'a été signalée lors des événements suivants à fort trafic.

Ce que les candidats oublient souvent

Comment forcer une mise à jour du Service Worker lorsque le navigateur maintient l'ancienne version dans l'état "en attente" ?

De nombreux candidats pensent que rafraîchir la page (F5) installe le nouveau Service Worker immédiatement, mais le navigateur maintient en réalité l'ancien worker actif jusqu'à ce que tous les onglets soient fermés pour assurer la cohérence de version. Le test manuel correct consiste à ouvrir le panneau Application des Chrome DevTools > Service Workers, à cliquer sur "Skip waiting" pour simuler la mise à jour, puis à vérifier que l'événement activate efface les entrées obsolètes de CacheStorage tout en préservant les données utilisateur de IndexedDB. Les testeurs doivent également valider l'expérience utilisateur en confirmant que la notification "Mise à jour disponible" apparaît et que la page se recharge sans perdre l'entrée du formulaire. Ignorer cette nuance du cycle de vie conduit à tester du code obsolète tout en croyant que la nouvelle version est active.

Qu'est-ce qui distingue le test de Background Sync de Periodic Background Sync, et pourquoi le comportement de Safari est-il différent ?

Le Background Sync différera les actions individuelles telles que les soumissions de paiement jusqu'à ce que la connectivité revienne, se déclenchant immédiatement lorsque le navigateur détecte le réseau, tandis que le Periodic Background Sync récupère proactivement du contenu en fonction des heuristiques d'engagement sans interaction utilisateur. Pour tester Background Sync, mettez le réseau Chrome DevTools sur "Hors ligne", effectuez l'action, restaurez la connectivité et surveillez l'événement Sync dans le panneau Application pour vérifier la réussite ou les rétries exponentielles. Pour Periodic Background Sync, il faut activer les drapeaux Chrome et simuler des scores d'engagement élevé, puis vérifier que la prélecture se produit tout en s'assurant que iOS dégrade gracieusement lorsque l'API n'est pas disponible. Les candidats confondent souvent ces API ou supposent que Safari prend en charge Periodic Background Sync, ce qui entraîne des chemins de code de secours non testés.

Comment valider le comportement de IndexedDB lorsque la Prévention Intelligente du Suivi de Safari purge le stockage ?

La ITP de Safari efface le stockage accessible par les scripts après sept jours d'inactivité utilisateur pour prévenir le suivi inter-sites, un comportement absent dans Chrome et difficile à simuler sans ajuster les horloges système ou utiliser les API de débogage WebKit. Les candidats testent souvent IndexedDB uniquement dans une seule session, manquant complètement le scénario d'"éviction de sept jours" et ne vérifiant pas la manière dont l'application récupère gracieusement les données du serveur après l'éviction. Les tests appropriés nécessitent de déclencher manuellement l'éviction, puis de s'assurer que l'application gère l'état de base de données vide en affichant des messages utilisateur appropriés et en réhydratant les données sans erreurs. De plus, il faut tester la demande de l'API StorageManager.persist(), qui demande à l'utilisateur une autorisation de stockage permanent dans Firefox, mais se comporte différemment dans Safari, garantissant que l'application gère les exceptions QuotaExceededError sans planter.