Question

J'essaie d'intégrer les tests Fitnesse en cours d'exécution à partir de MSBuild dans ma version nocturne basée sur TFS.

Pour essayer de le rendre autonome, je voudrais démarrer le serveur seleniumRC uniquement lorsque cela est nécessaire pour la condition physique.

J'ai vu qu'il existe un " appareil de ligne de commande " mais il est écrit en Java, puis-je l'utiliser?

Était-ce utile?

La solution

Je pense que vous pourrez peut-être. Vous pouvez appeler n'importe quel processus facilement dans MSBuild à l'aide de la tâche . Cependant, le problème est que la tâche d’exécution attend que le processus Selinium se termine avant de continuer, ce qui n’est pas le comportement que vous souhaitez. Vous souhaitez exécuter le processus, le maintenir pendant votre construction, puis le supprimer à la fin de votre construction.

Par conséquent, je pense que vous devrez probablement créer une tâche MSBuild personnalisée pour cela. Voir l'article suivant pour un exemple de tâche créée par quelqu'un qui s'exécutera de manière asynchrone, renvoyant le contrôle au script de génération:

http://blog.eleutian.com/2007/03/01 /AsyncExecMsBuildTask.aspx

Et pour un exemple d'appel d'un programme Java à partir de MSBuild (mais dans ce cas de manière synchrone), jetez un œil à ma tâche qui appelle Ant de MSBuild ici

http://teamprise.com/products/build/

Dans le cadre de votre tâche MSBuild, vous souhaitez exporter l'ID de processus que vous avez créé dans une propriété de sortie afin qu'à la fin de votre script de génération, vous puissiez appeler une autre tâche MSBuild personnalisée qui tue le processus. Pour ce faire, il peut rechercher l'ID de processus transmis en tant que variable dans MSBuild, puis appeler Méthode Process.Kill , c.-à-d.

Process process = Process.GetProcessById(ProcessId);
process.Kill();

Cela dit, vous devez veiller à ce que votre tâche de suppression soit toujours exécutée dans MSBuild en vous assurant qu'elle a été incluse lors de la création des chemins d'erreur, etc. Vous pourriez probablement rendre les choses un peu plus résilientes en faisant en sorte que la tâche de démarrage de sélénium RC recherche d’autres processus de séléniumRC et les tue avant de commencer un nouveau - ainsi, si un processus ne se fermait pas correctement pour une raison quelconque, il ne fonctionnerait que jusqu’à la prochaine construction.

Quoi qu'il en soit, ma réponse semble être un travail laborieux, donc j'espère que quelqu'un d'autre trouvera un moyen plus facile. Vous pourrez peut-être créer le processus seleniumRC dans le démarrage de la suite de tests FitNesse et le détruire dans la suite de la destruction, ou créer une tâche personnalisée qui étend les tâches de votre coureur FitNesse et déclenche de manière asynchrone seleiniumRC exécuter le processus de test puis le tuer après.

Bonne chance,

Martin.

Autres conseils

Merci pour vos réponses!

C’est ce que j’ai fait jusqu’à présent.

J'ai créé une installation (très simple) qui démarre un processus avec la ligne de commande fournie, dans mon cas, startSelenium.bat. L'appareil renvoie le ProcessID afin que je puisse le stocker dans mon contexte d'adaptation et fermer cette session ultérieurement.

Je peux maintenant créer une page SuiteSetUp qui ressemble à ceci:

| RunCommandFixture |

| Ligne de commande | RunCommand? |

| C: \ Projets ... \ startSeleniumRC.bat | > > processus de sélénium |

et un SuiteTearDown comme celui-ci

| RunCommandFixture |

| ProcessID | StopCommand? | | <

Cela fonctionne pour moi. Aucun sélénium RC ne commence à la demande de mon test de fitnesse.

Qu'en est-il de l'écriture d'une application .NET simple faisant un Process.Start (& "; ligne de commande selenumRC &";) exécuté par votre script de construction?

Si vous n'êtes pas trop loin sur la route Sélénium; Puis-je vous suggérer de consulter des outils d'automatisation de navigateur .NET similaires? spécifiquement WatiN ou ArtOfTest. Les & "; Piles &"; Celles-ci sont complètement .NET, il est donc beaucoup plus facile de les exécuter sur différentes machines.

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