Question

Je souhaite configurer des tests automatisés de scénarios de test sur des fichiers binaires Fortran dans un référentiel SVN, à la demande ou avec un travail Cron. Pour compliquer légèrement le problème, les scénarios de test seraient exécutés sur un cluster de calcul, de sorte que chaque scénario de test devrait générer un script PBS. (Environnement Linux)

Il existe de nombreux tests Web et des solutions de tests unitaires, mais je n’ai rien trouvé qui permette de tester directement les fichiers binaires. Dites, fournissez des entrées et comparez les sorties avec la solution attendue.

Avez-vous des suggestions sur la manière dont cela devrait être abordé?

Était-ce utile?

La solution

Je suis d'accord pour dire que c'est quelque chose qui serait assez simple à écrire. En fonction de la configuration de vos fichiers binaires et de la différence entre vos programmes, vous pouvez même inclure les scripts de test dans votre référentiel SVN.

Puisque vous êtes dans un système batch, vous avez une certaine liberté pour programmer les tests. Vous voudrez peut-être avoir un générique & Quot; verify & Quot; tâche pour laquelle vous pouvez fournir des paramètres de configuration (par exemple, aux emplacements de la sortie attendue et réelle du programme). Nick mentionné utilisant grep pour vérifier la sortie de qstat pour votre ID de travail, mais vous pouvez indiquer à PBS de suspendre un travail jusqu'à la fin du travail. Cela voudrait dire que vous avez quelque chose comme:

...
#PBS -N run_test_1
#PBS -a 200906270000
...
<compile test>
<run test>
<save output>

une fois soumis, enregistrez l'ID de travail renvoyé par qsub (votre procédure dépend de votre plate-forme - généralement, un élément tel que job_id=$(qsub $JOB_FILE) est suffisant). Ensuite, connectez cette valeur à un autre script:

...
#PBS -N verify_test_1
#PBS -W depend=afterany:$job_id
<run comparison>
...

Ceci (lorsque la valeur correcte de job_id est insérée) suspend l'exécution du test jusqu'au 27 juin 2009 à minuit, ainsi que l'exécution du travail de vérification jusqu'à la fin du travail de test (afterany directive indique qu’il doit toujours être exécuté après le premier travail - pas seulement s’il réussit).

Toutefois, en fonction du délai d'exécution de votre cluster, vous pouvez regrouper tout cela dans un script, mais vous pouvez toujours utiliser les mises en attente temporelles PBS pour ne s'exécuter qu'à un moment donné. J'ai récemment commencé à utiliser Python au lieu de scripts shell pour gérer même ces tâches liées au système. J'ai testé hier pour rendre le script Python exécutable et ajouter les directives PBS directement dans le code source. Cela semblait très bien fonctionner.

Autres conseils

Il y a peut-être une meilleure réponse plus pré-empaquetée, mais je pense que Buildbot est suffisamment configurable pour que tant que vous pouvez écrire un script python pour exécuter votre binaire, il devrait fonctionner à votre guise.

http://buildbot.net/

Pour un simple test d’entrée / sortie, il semble que vous puissiez créer vous-même un script pour le faire ...

par exemple

for each program
    compile
    submit to queue
    wait for finish
    check output

En pratique, vous souhaiterez probablement soumettre plusieurs tâches à la file d'attente, mais l'idée est la même.

Voici quelques idées qui me viennent à l’esprit sur la manière de réaliser chaque étape.

Envoi

Vous pouvez utiliser un modèle de script PBS et utiliser sed pour rechercher / remplacer les jetons d'entrée par des valeurs d'entrée pour le programme avant de le soumettre

.

En attente de la fin

Vous pouvez à plusieurs reprises grep la sortie de qstat pour votre identifiant de travail, pour attendre qu'il se termine

Vérifier la sortie

Vérifiez le fichier de sortie du travail par rapport à la sortie attendue. Vous pouvez soit enregistrer la sortie attendue dans un fichier et utiliser diff, soit disposer d’une liste d’expressions régulières devant correspondre à chaque exécution

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top