Logiciel de test d'automatisation QIWI-terminaux

Bonjour, Habr!

Aujourd'hui, nous allons parler d'un sujet spécifique: l'automatisation des tests de logiciels pour les terminaux libre-service QIWI.

Il existe des domaines dans le thème du test de l'automatisation qui sont analysés de haut en bas plusieurs fois, par exemple, les tests de services Web. Pour ces domaines, il existe des outils, des modèles et des meilleures pratiques distincts. Vous n'avez rien à inventer, les risques sont minimes, vous prenez et faites.

Il y a des situations inverses. Le sujet est spécifique, personne n'a un aperçu des solutions toutes faites, il n'y a pas d'outils, la pile technologique du produit est particulière. Vous devez plonger profondément dans le sujet, des bâtons et euh ... d'autres matériaux improvisés aux outils d'artisanat pour vous-même et collecter simultanément de très nombreux râteaux de différentes tailles et une force mortelle.

Je voulais parler de quelque chose comme ça aujourd'hui. L'article convient aux personnes impliquées dans le développement et le test de logiciels pour les terminaux bancaires ou les machines en libre-service. Et aussi à ceux qui veulent élargir leurs horizons techniques avec des exemples de «mais ça se passe aussi comme ça». Terminal QIWI en 2020. En arrière-plan, vous pouvez voir son remplissage.




Problème


Le premier terminal QIWI est apparu en 2004, puis a pu reconstituer le compte d'un téléphone mobile. Depuis, beaucoup d'eau a coulé et les ASO (machines en libre-service) ont beaucoup changé. Maintenant, avec eux, vous pouvez reconstituer les cartes bancaires, effectuer des virements, payer les services de divers fournisseurs (fournisseurs) - logement et services communaux, amendes de la police de la circulation, organismes de crédit, nos propres produits QIWI (portefeuille QIWI, carte de versement sans intérêt Conscience). Les terminaux QIWI peuvent également fonctionner en mode postamata (points de livraison automatisés pour les boutiques en ligne).

À quoi ressemble un terminal?


Du point de vue du fer, le terminal ASO est un ordinateur de bureau ordinaire avec des périphériques spécifiques, tels que des accepteurs de billets et de pièces, des imprimantes de reçus, des distributeurs, des terminaux de point de vente (réception de cartes en plastique), etc.

Et voici le premier problème.


Cette célèbre photographie a été prise dans le comté de Sonoma, en Californie. Ils disent que ce sont des couleurs naturelles, sans aucun traitement. Soit dit en passant, c'est sur le territoire du comté de Sonoma que se trouvait la colonie russe la plus méridionale d'Amérique.

Oui, c'est elle. Le système d'exploitation, qui a été interrompu en 2014, est Windows XP. La version POSReady a été tirée jusqu'en 2019, mais ... Ce n'est pas si simple.

Le fait est que les terminaux ne sont pas la propriété de QIWI. Ils appartiennent à des partenaires, les soi-disant Agents, entrepreneurs individuels et personnes morales qui concluent un accord avec les terminaux d'achat QIWI, louent des espaces dans les centres commerciaux et reçoivent des revenus presque passifs.

En conséquence, 90% de la flotte de terminaux QIWI (et il y en a plus de 100 000 en Russie et dans les pays étrangers) exécutent Windows XP sur une variété de matériel - de 512 Mo à 4 Go de RAM, une variété de processeurs (du Pentium 4 des années zéro à plus). Core i5 moins moderne) et la qualité et la vitesse différentes d'Internet. Terminaux d'âges différents, certains d'entre eux sont régulièrement mis à niveau, et certains n'ont pas été mis à niveau depuis très longtemps (cela fonctionne - ne le touchez pas!). Notre tâche est de fournir régulièrement les dernières mises à jour du logiciel du terminal (il s'appelle MarATL) et de maintenir la compatibilité avec toute cette variété de garnitures et de périphériques.

Système d'exploitation de support expiré


Imaginez un circuit d'automatisation de test simple. Nous avons un serveur CI, par exemple, TeamCity ou Jenkins. Notre logiciel de terminal est collecté à partir de raws par événement (commit ou heap), le fichier binaire collecté est disposé quelque part. Le logiciel s'installe automatiquement, les autotests fonctionnels de nuit sont lancés ... Euh, arrêtez! Où va l'installation du logiciel? Et comment?

Comme je l'ai dit ci-dessus, 90% des terminaux utilisent Windows XP, qui a pris fin en 2014. Cela signifie que ce système d'exploitation ne respecte plus les politiques de sécurité depuis longtemps, aucune mise à jour n'est publiée pour lui, il n'y a pas de nouveau logiciel de travail pour lui, et même le Microsoft Visual Studio natif ne compile C ++ pour cela qu'après avoir dansé avec un tambourin, ou plutôt avec la version de la chaîne d'outils pour le collecteur MSBuild.

En général, l'exécution de tests et d'une sorte de logiciel sur un terminal ou une machine virtuelle avec Windows XP est une très mauvaise idée. Vous ne pouvez pas augmenter Buildagent TeamCity sur XP, vous ne pouvez pas configurer une telle machine dans le playbook Ansible, il n'y a pas de conteneurs non plus. Les modèles de virtualisation pour Windows XP ne sont pas beaucoup non plus. Dans toute grande entreprise qui pense à la sécurité des informations, une machine Windows XP sera tenue à l'écart du réseau d'entreprise, ou encore moins du domaine. Autrement dit, toute interaction avec le terminal (ou la machine virtuelle faisant semblant de l'être) doit se produire à distance, le terminal lui-même doit disposer d'un minimum de logiciels tiers.

Décision


Certaines personnes sont surprises quand elles entendent parler d'un tas d'OpenSSH et de Windows XP. Dans une version moderne de Microsoft, la prise en charge de la SST est incluse directement dans le système. Dans le moins moderne (Windows 7), il existe des programmes d'installation SSH utilisant PowerShell. C Windows XP, la situation est un peu pire, mais seulement un peu. Il existe une ancienne version du programme d'installation qui s'exécute sans logiciel supplémentaire.

SSH est un moyen ancien, bon et fiable de contrôler à distance un hôte, une technologie bien connue. Vous devez implémenter des classes de connecteurs SSH qui peuvent faire plusieurs choses en parallèle. Par exemple, en mode en ligne, chargez de nouveaux journaux à partir du terminal, exécutez certaines commandes (copie de fichiers, exécution de scripts, émission de droits, obtention d'une liste de processus, surveillance de l'heure système du terminal, etc.).

La surveillance du temps système est particulièrement intéressante. Par les outils de ligne de commande standard, Windows XP affiche l'heure uniquement sous une forme formatée heures-minutes-secondes, etc., pas d'heure UNIX pour vous. L'embuscade, par exemple, est que XP n'a pas reçu de mises à jour de fuseau horaire depuis longtemps, et notre gouvernement russe est connu pour ses jeux constants avec l'annulation de l'heure d'été ou d'hiver.

Par exemple, le Windows XP SP3 standard dans le fuseau horaire de Moscou affiche l'heure une heure plus tôt que l'heure réelle de Moscou. En conséquence, les horodatages des journaux de terminal ne coïncident en aucun cas avec l'heure sur le circuit de test.

Paiements-Paiements-Paiements ...


L'interface du terminal QIWI est essentiellement un site Web qui s'exécute sur un moteur de navigateur, qui est généralement assez ancien. Selon le protocole websocket, il interagit avec MarATL, en fait un logiciel de terminal. Lors du choix d'un paiement sur le terminal (par exemple, le paiement de communications cellulaires) à l'aide d'une série de commandes, un fournisseur de paiement est sélectionné, le montant des commissions, les restrictions sur l'acceptation des factures sont déterminés, un paiement est créé pour un fournisseur spécifique, qui est ensuite envoyé via le traitement du terminal de paiement aux paiements.

Interagir avec l'interface Web à distance est une bonne idée, en particulier les tests d'interface - une autre tâche. Vous pouvez créer une page Web de test qui sera basée sur la durée du test au lieu du fichier index.html standard. La page exécute un script JS qui fonctionne avec le logiciel du terminal et, d'autre part, crée un client de socket Web qui regarde vers l'hôte sur lequel les tests s'exécutent.

Du côté des autotests, vous devez implémenter un serveur de socket Web qui attend au début de la connexion client à partir du terminal et envoie des commandes inchangées via la page de test au logiciel du terminal. Les réponses logicielles sont également envoyées au serveur de socket Web de test.

Autrement dit, vous pouvez décrire l'ensemble des commandes pour le test de paiement sous la forme de JSON, qui décrit successivement les commandes que vous devez envoyer et le type de réponse à attendre.


Page de test d'interface. Affiche les commandes qui le traversent.

Et où est l'argent?


La tâche technique la plus insidieuse est de simuler les périphériques du terminal. L'imprimante de reçus est simulée trivialement, une imprimante virtuelle est créée dans le système d'exploitation qui imprime les données dans un fichier. Vous pouvez obtenir ce contrôle à partir du terminal (ou de sa copie, formée par le logiciel du terminal lui-même) et le décoder, en vérifiant simultanément, par exemple, que tous les champs nécessaires sont présents dans ce contrôle.

Plus compliqué avec les appareils qui acceptent les accepteurs de billets et les accepteurs de pièces. Il est clair que si nous voulons tester le scénario de paiement, nous devons en quelque sorte émuler la présence de l'accepteur de factures sur le terminal, prendre en charge la fonctionnalité d'acceptation de factures, de retour, de simulation de divers problèmes (par exemple, retour d'une facture froissée).

La plupart des appareils récepteurs d'argent fonctionnent à l'aide du protocole CashCode NET. Ce protocole définit les scénarios d'interaction entre l'accepteur de factures et le contrôleur (dans notre cas, le contrôleur est notre logiciel de terminal).


Un exemple de l'interaction du contrôleur et du validateur de billets en utilisant le protocole CashCode. Avec une certaine fréquence, le contrôleur demande l'état de l'appareil.


La taille minimale de la commande CashCode est de 6 octets. Pour une description des commandes, voir la spécification du protocole CashCode NET.

L'accepteur de factures standard est connecté au terminal via le port COM. Il existe des utilitaires tiers qui vous permettent de créer un port série virtuel sur la machine, par exemple, VSPE . Même les scripts de transfert de ce port via une connexion TCP sont pris en charge.

Notre cas est plus simple, nous avons besoin d'un outil qui peut s'accrocher au port à l'aide de WinAPI et possède une interface pratique arbitraire, par exemple, la plus simple stdin / stdout, qui peut être connectée à l'aide de SSH.

Tula dans un flux séparé communique avec le contrôleur via un port série et, si nécessaire, imite les situations de réception soi-disant «d'argent». Il est également nécessaire d'avoir une sorte de pool de comptes ou de fournisseurs de test, dont les paiements ne seront pas traités pour de vrai, mais seront à un moment donné repoussés. Ou, pour les cas plus complexes, l'argent passe par un traitement réel, mais arrive sur des comptes spéciaux, à partir desquels ils seront à nouveau débités pour des tests de paiement.

Tel est le cycle de l'argent dans la nature.


Imprimante de reçus (ci-dessus) et accepteur de factures (ci-dessous).

24/7


Les logiciels pour les terminaux et les guichets automatiques devraient être extrêmement résistants à diverses situations d'urgence - manque d'Internet, problèmes avec un accepteur de factures, etc. Étant donné que ces logiciels s'exécutent sur un terminal avec une priorité et des droits très élevés, ils interceptent essentiellement tout le contrôle du système d'exploitation. Vous ne pouvez pas simplement le réduire ou le fermer avec Alt-F4. Le logiciel peut redémarrer lui-même et le terminal, incl. En boucle. Il est également nécessaire de vérifier ces scénarios stressants, par exemple, le manque de communication avec le traitement des paiements. Le terminal répond à cela par des redémarrages périodiques, vous devez vérifier qu'il le fait correctement et correctement à chaque fois qu'il charge le logiciel du terminal.

Installation à partir de zéro et mise à jour


Le logiciel du terminal installé est mis à jour de manière centralisée à l'aide du traitement des paiements. Le traitement prévoit de mettre à jour un terminal spécifique et détermine le profil de mise à jour pour celui-ci, c'est-à-dire les fichiers et l'emplacement de chargement. Pour mettre à jour, il est nécessaire d'effectuer un certain nombre de procédures dans la base de données de traitement, puis de surveiller le terminal. Vérifiez par les journaux que le téléchargement des fichiers nécessaires a commencé et que la mise à jour a été effectuée avec succès et que le logiciel du terminal a augmenté.

Une installation propre à partir de zéro est plus difficile. Habituellement, une personne le fait dans les champs en copiant simplement le fichier d'installation sur le terminal et en entrant les paramètres et les données d'autorisation dans les formulaires d'installation, qui est généralement une application WinAPI avec des contrôleurs Windows standard (TextBox, CheckBox, etc.).

Dans nos tests automatiques pour un script d'installation propre, un script Python est attaché au terminal, que le programme d'installation démarre, interagit avec les contrôleurs à l'aide de la bibliothèque pywinauto et écrit son propre journal d'installation. Une fois la première étape de l'installation terminée, le script se termine et le logiciel du terminal passe l'autorisation en cours de traitement, reçoit les chemins d'accès au profil d'installation et télécharge tous les fichiers nécessaires. Ici, en temps réel, vous devez surveiller les journaux sur le terminal via SSH. Toutes les situations anormales pendant l'installation (par exemple, des données d'autorisation incorrectes) y sont écrites, vous devez lire ces journaux en ligne et, si nécessaire, considérer l'échec du test d'installation propre.


Nettoyer l'installation à partir de zéro MarATL

Conclusion


Nous avons passé en revue les principaux aspects techniques de la création d'autotests pour les logiciels de terminaux. Sans plonger profondément dans la technologie, nous avons trié une grosse tâche en différents aspects. Posez des questions dans les commentaires, si le sujet est intéressant, vous pouvez mettre en évidence certains points dans un article séparé plus en détail. Merci pour l'attention!

Source: https://habr.com/ru/post/undefined/


All Articles