[PYTHON] Prise en compte du test de la bibliothèque Pepper Box

Le développement d'applications de Pepper peut essentiellement se faire dans un environnement de programmation visuelle appelé Chorégraphe avec une interface de type «boîtes» de connexion, et il est relativement facile de développer des applications. Les développeurs peuvent sélectionner les cases requises dans la «bibliothèque de boîtes» et les connecter pour définir le comportement de l'application («comportement»).

Bien que les bibliothèques de boîtes standard puissent atteindre des comportements raisonnables, ces bibliothèques de boîtes ne fournissent pas nécessairement des boîtes de manière exhaustive, et vous devez personnaliser l'implémentation de la boîte (script Python, etc.). La réalité est qu'il y a pas mal de cas où vous devez le faire. Pour ces parties, je me demande s'il est réaliste de développer des bibliothèques box sur une base communautaire.

Ensuite, je pense que je vais créer une bibliothèque de boîtes, mais bien sûr je ne veux pas avoir de bogue dans la boîte et avoir des problèmes dans la phase ultérieure. Cependant, je ne trouve officiellement rien qui semble être un cadre de test de boîte ... Avec ce genre de sentiment, j'essaie de faire un prototype tout en réfléchissant à la façon de tester la bibliothèque de boîtes de Pepper et d'améliorer la qualité, donc ce mémo.

Jetez un coup d'oeil

Comportement de test de la boîte?

En regardant les tests dans d'autres langages de programmation, tels que Python, il semble que les formats d'entrée, de sortie et de paramètre des boîtes peuvent être remplacés par des "classes" Python telles quelles.

Par exemple, en Python, un cas de test décrit si (une instance de) la classe testée se comporte comme prévu. Dans ce cas de test, écrivez le code qui entre réellement la valeur dans l'instance à tester et vérifie si la valeur de sortie est la même que la valeur attendue. Dans Chorégraphe, il semble naturel de préparer un comportement de test de la même manière et de connecter la boîte à tester et la boîte de vérification du résultat. Par exemple, dans le cas d'un test de boîte d'attente, la boîte d'attente doit sortir n secondes après avoir reçu l'entrée, et elle ne doit pas sortir avant n secondes.

Relation entre la bibliothèque de boîtes et la boîte?

Évidemment, le test doit être fait exactement sur la même boîte dans la bibliothèque de boîtes. Tester contre une version différente de la boîte de la bibliothèque de boîtes ne signifie pas que la boîte dans la bibliothèque de boîtes est valide.

Comme je l'ai un peu écrit dans Pepper's File Exploration (Project File), la boîte glissée et déposée de la bibliothèque de boîtes au comportement est copiée pendant le comportement. Il semble qu'il soit agencé sous forme d'être. Dans ce cas, même si vous créez un comportement de test, la boîte à tester peut être différente de celle de la bibliothèque de boîtes et elle peut ne pas être en mesure de remplir pleinement son rôle de test. Je viendrai.

Afin de conserver l'identité de l'implémentation de la boîte comme celle-ci, il semble qu'il soit nécessaire de pouvoir identifier d'une manière ou d'une autre la relation entre la boîte dans le comportement et la bibliothèque de boîtes de la source glisser-déposer. En regardant le format du fichier de définition de comportement, je ne trouve aucune information permettant d'identifier de manière unique la boîte ... Par exemple, dans le dernier document, Boîtes améliorées de mises à jour dans Choregraphe 2.0.5,

Here is the list of boxes you should cut/replace:

Ou (une nuance qui peut être remplacée à la main?),

Now these boxes call an ALMotion method, so they will be updated automatically by new releases.

Il y a aussi une description comme (Elle sera mise à jour automatiquement (sans remplacer la boîte) car il s'agit d'un changement dans l'implémentation de l'API), donc s'il y a un changement dans la boîte dans la bibliothèque de boîtes, le côté comportement sera automatiquement changé. Je pense qu'il n'y a pas de mécanisme officiel pour le suivre.

Des défis à considérer

C'est pourquoi je vais considérer les deux choses suivantes.

  1. Comment remplacer (banaliser) une boîte dans un comportement par une boîte dans une bibliothèque de boîtes
  2. Comment créer un comportement de test

Alors, tout d'abord, réfléchissons à la façon de conserver l'identité de (copier) la boîte.

Tentative: remplacez la boîte dans le comportement par celle de la bibliothèque de boîtes

J'ai fait un prototype d'outil de remplacement automatique. Le code est ci-dessous.

https://github.com/yacchin1205/choregraphe-box-util

Je ne l'ai testé que sur Linux, mais il devrait être installé en le clonant correctement et en faisant pip install -r requirements.txt; python setup.py install. peut être. Le code est écrit en Python. C'était la première fois que j'écrivais un outil indépendant en Python, j'ai donc beaucoup appris ...

De plus, lxml est utilisé pour le traitement XML. C'est parce que le fichier XML de la boîte utilise la section CDATA et que le standard Python ElementTree n'a pas bien sorti la section CDATA ...

Quant à savoir comment utiliser

$ replace-boxes -l (Chemin de la bibliothèque de boîtes(Seuls les répertoires sont pris en charge)) (Du projet.Chemin vers le fichier pml)

Par exemple, concernant le comportement dans le projet spécifié

  1. Recherchez dans la bibliothèque de boîtes spécifiée une boîte qui correspond à la boîte dans le comportement.
  2. Remplacez la boîte dans le comportement par celle de la bibliothèque de boîtes (le cas échéant)

De cette façon, l'idée est de conserver l'identité des boîtes dans le comportement et des boîtes dans la bibliothèque de boîtes. C'est un outil que j'utilise toujours comme test, alors assurez-vous de sauvegarder votre projet avant de l'essayer. Si vous voulez juste voir à quoi ressemble la conversion, vous pouvez ajouter l'option --dry-run -v.

Voici les détails de ce que nous faisons ...

Correspondance de boîte

Tout d'abord, il est nécessaire de faire correspondre la correspondance entre la bibliothèque de boîtes et le côté comportement de chaque boîte. Cette fois, nous cherchons à savoir si les éléments suivants correspondent.

Le nom de la boîte est difficile à traiter. Les noms de boîtes n'ont pas quelque chose comme un espace de noms tel que "Say" ou "Basic Awareness", il est donc possible que plusieurs bibliothèques de boîtes avec le même nom soient dupliquées. De plus, si plusieurs cases sont placées dans le même flux, des numéros indiquant des copies tels que «Say (1)» et «Say (2)» seront attribués, ce qui est encore plus compliqué.

Étiquette d'identification de la boîte

Pour la correspondance de nom de boîte, la correspondance est effectuée en supposant un format tel que "nom de boîte (n)", mais cela seul ne résout pas le conflit de nom de boîte fourni par différentes bibliothèques de boîtes.

Par conséquent, en ajoutant la chose semblable à une annotation suivante à l'explication de la boîte, j'essaie de voir si elle correspond également.

@source https://github.com/yacchin1205/choregraphe-box-util

En regardant la valeur de cette @ source, j'essaie de déterminer si elle provient de la même bibliothèque de boîtes. Si vous souhaitez supprimer ce jugement, vous pouvez ajouter l'option --ignore-tags.

Processus de remplacement

Lors du remplacement, il copie essentiellement les boîtes de la bibliothèque de boîtes correspondantes dans le comportement. Cela remplacera le script de la boîte, la description, etc. L'exception est la valeur de Parameter, qui hérite de celle de la case qu'il remplace.

De plus, les boîtes de type plugin qui affichent des zones de texte sur Choregraphe, comme Text Edit, ne sont pas destinées à la conversion (ce plugin semble réécrire le script lui-même dans la boîte, c'est donc une bonne méthode de remplacement. Je ne peux pas penser à ...) De plus, le remplacement n'est pas pris en charge lorsque des ressources (telles que des fichiers audio) sont liées à la boîte.

C'est pourquoi, bien qu'elle soit limitée, il semble que l'identité de la boîte puisse être conservée entre le comportement et la bibliothèque de boîtes, alors créons un comportement de test.

Essai: comportement de test

Il est difficile de le rendre globalement soudainement, donc parmi les bibliothèques de boîtes que j'ai commencé à créer avec j'ai essayé HTML5 TEST avec Pepper, le thème est Afficher la boîte d'URL. J'ai décidé de faire un simple test de comportement.

https://github.com/yacchin1205/pepper-web-boxes

Les comportements de test peuvent être trouvés dans tests / test-show-url.

Test de succès

Le test du succès de Show URL ressemble à ceci.

test-show-url-success.png

En gros, il se compose des deux flux suivants.

  1. Confirmez que la tablette est à l'état CONNECTÉ dans les cases Activer WiFi et Obtenir l'état WiFi (les deux sont des cases uniques).
  2. Exécutez la zone Afficher l'URL pour voir si la sortie onSuccess se déclenche dans un certain laps de temps.

Le point est 2. La case Attendre sous l'URL Afficher indique au journal qu'il s'agit d'une erreur si la sortie onSuccess n'est pas déclenchée dans les 10 secondes suivant le début (si rien n'est entré dans l'entrée onInput d'Assert Bang). Il est conçu pour être produit. De plus, lorsque la sortie onFailure est entrée dans la zone Failure, elle est également sortie dans le journal en tant que traitement d'erreur immédiat.

Exécutez simplement ce comportement pour voir si la zone Afficher l'URL se comporte comme prévu avec un message d'erreur.

Test d'échec

Inversement, le test indique également que l'exécution de Afficher l'URL après la désactivation du WiFi entraînera une erreur.

test-show-url-failure.png

Ici, après avoir exécuté Disable WiFi, exécutez Show URL et confirmez que la sortie onFailure est exécutée par la boîte Assert Bang. Si onSuccess est émis par inadvertance, la case Échec indique clairement qu'il s'agit d'une erreur. Cela permet de vérifier si le traitement dans la situation où la boîte ne fonctionne pas est comme prévu.

Les boîtes Afficher URL dans ces tests sont décrites comme des boîtes séparées pendant le comportement, mais la commande replace-boxes ci-dessus peut être utilisée pour maintenir l'identité avec la bibliothèque de boîtes. Si vous faites une erreur dans la zone Afficher l'URL, vous pouvez réécrire la zone dans le comportement de test et tester à nouveau.

Résumé

Dans cet esprit, j'ai écrit un outil pour maintenir l'identité de la boîte et un comportement de test pour voir si la boîte se comporte comme prévu.

Personnellement, j'aime beaucoup la division Chorégraphe, donc je pense pouvoir développer de temps en temps de tels outils auxiliaires.

J'aimerais aussi voir un outil de génération de documents de bibliothèque de boîtes ... Je me demande si la bibliothèque de boîtes attachée à Choregraphe n'a pas de documents.

Recommended Posts

Prise en compte du test de la bibliothèque Pepper Box
Créer une boîte à Tweet pour Pepper