Techniques de test avancées
Les concepts avancés de test logiciel peuvent vous faire gagner beaucoup de temps et d’énergie. Repeato vous aide à améliorer vos processus de test.
Créer un test à partir de blocs fonctionnels
Section intitulée « Créer un test à partir de blocs fonctionnels »Vous êtes-vous déjà demandé comment créer des tests sans vous répéter ? L’automatisation des tests permet d’enregistrer des tests et de les réutiliser comme vous le souhaitez — un avantage considérable de tests automatisés par rapport aux tests manuels.
Dans cette vidéo, nous montrons comment diviser vos tests en parties réutilisables. Nous présentons également certaines possibilités de scripting de Repeato et expliquons pourquoi il peut être utile de rendre certaines étapes de test facultatives. Notre sujet de test est l’application de liste de tâches « Asana ». Nous testerons la création de tâches.
Contenu de la vidéo
- Automatiser la navigation vers le bon écran
- Automatiser la création d’une tâche
- Automatiser la suppression de toutes les tâches
- Rassembler le tout dans un seul test
Scripting
Section intitulée « Scripting »Voici un exemple d’automatisation plus complexe. Nous automatisons un jeu (éclater des bulles de puissance) avec quelques « étapes de vérification du contenu » facultatives et quelques lignes de code.
Consultez le code détaillé ci-dessous.
Définir une fonction utilisable dans d’autres étapes
Section intitulée « Définir une fonction utilisable dans d’autres étapes »Lorsque vous définissez une fonction, elle n’est généralement accessible qu’à l’intérieur de la même étape. Nous voulons appeler notre fonction dans d’autres étapes ; nous devons donc utiliser l’un des objets à durée de vie plus longue pour stocker la fonction. data est un tel objet, et nous pouvons définir une fonction comme ceci :
data.checkLastMatchAndShoot = async function() { // myCode goes here}Nous ajoutons async car nous utilisons du code asynchrone dans notre fonction. En principe, toutes les fonctions utilisées avec await, doivent être encapsulées dans des async fonctions. Sinon, notre script échouera. Vous pouvez en lire davantage sur async / await ici.
Récupérer le résultat de la dernière étape exécutée
Section intitulée « Récupérer le résultat de la dernière étape exécutée »Après l’exécution d’une étape facultative, nous pouvons vérifier dans notre script si le résultat renvoyé indique une réussite. Nous pouvons accéder au résultat de l’exécution de la dernière étape via testRunner.lastStepResult.
Il est également possible de vérifier le nombre de correspondances (combien de fois l’objet a été trouvé) :
testRunner.lastStepResult.matches.length
S’il n’y a aucune correspondance, c’est-à-dire qu’aucune balle d’une certaine couleur n’a été trouvée, nous retournons simplement.
Sinon, nous trions les correspondances de haut en bas. Cela sera important, car nous devons distinguer la balle dans le lanceur des balles situées au-dessus, dans l’aire de jeu.
Nous le faisons en vérifiant la valeur de la position y de la correspondance :
// if y position of last match is lower than 70% of the screen heightif(lastMatch.position.y > 0.7)Tirer la balle dans la bonne direction
Section intitulée « Tirer la balle dans la bonne direction »Si nous avons trouvé une balle d’une certaine couleur, nous devons donc savoir dans quelle direction tirer, n’est-ce pas ?
Nous vérifions l’ensemble des correspondances et examinons de plus près la correspondance précédente (celle située juste au-dessus de la balle dans le lanceur).
const oneBeforeLastMatch = matches[matches.length - 2]
Nous pouvons utiliser cette correspondance pour définir la direction du tir. Pour tirer, nous simulons un geste de glissement de la balle dans le lanceur vers la balle de même couleur située juste au-dessus.
Pour avoir une vue d’ensemble, voici le code complet :
data.checkLastMatchAndShoot = async function() { var matches = testRunner.lastStepResult.matches if(matches.length === 0){ // no ball of this color found return false }
// we sort the matches from top to bottom matches = matches.sort((match1, match2) => match1.position.y - match2.position.y) // get the most bottom match const lastMatch = matches[matches.length - 1]
// if most bottom match is not in the field, but at the very bottom, this means that it is inside the launcher if(lastMatch.position.y > 0.7) { const oneBeforeLastMatch = matches[matches.length - 2] testRunner.deviceConnector.sendDown(lastMatch.position.x, lastMatch.position.y) await sleep(1000) testRunner.deviceConnector.sendMove(oneBeforeLastMatch.position.x, oneBeforeLastMatch.position.y) await sleep(1000) testRunner.deviceConnector.sendUp() return true } else { return false }}