8
votes

Exécutez des tests d'intégration de test / junit sur le serveur distant à partir de l'IDE

À l'intérieur de mon IDE (Eclipse ou Netbeans, peu importe), j'ai des crises test de test (mais ma question fait également référence aux tests Junit distants), qui sont des tests d'intégration. Ces tests ont besoin d'un serveur d'intégration à exécuter, ils ne peuvent pas être exécutés sur une machine locale. Ils ont besoin de l'environnement complet du serveur d'intégration - pas seulement des trucs liés à conteneur Javae (=> pas d'arquillian ni de jeunit).

Maintenant, je veux pouvoir exécuter ces tests de mon IDE (Eclipse) - de préférence avec le plugin de test - mais lorsque je les lance, ils doivent réellement être exécutés sur le serveur d'intégration distant.

est-il possible de lancer des tests d'intégration sur un serveur distant de mon IDE? J'aime l'idée d'avoir une sorte d'agent sur le serveur distant qui attend les demandes de test et les exécute. Mais comme je l'ai dit, ce serait bien si cela fonctionne de l'intérieur du plugin de test.

Ai-je besoin d'une certaine solution de contournement, par exemple des scripts de fourmis (espérons-le) ou une magie mavenée? Quelles sont les meilleures pratiques?

Je sais que je pourrais également créer desservices pour ma demande, puis je peux les appeler des tests d'unités locales. Mais j'aimerais savoir s'il existe également des possibilités sans webservices.


0 commentaires

4 Réponses :


2
votes

Malheureusement, je n'ai pas de solution prête, mais je pense que je peux vous donner des conseils depuis que j'ai passé du temps à penser à cela.

Je ne sais pas sur Testng mais Junit a la possibilité de plier votre propre exécutif test. Je suis sûr que le test contient des fonctionnalités appropriées. Alors, trouvez-le et connais-le. Étant donné que vous pouvez contrôler la manière dont votre test est appelé, vous pouvez même faire autre chose au lieu d'appeler les méthodes du boîtier de test. Par exemple, appelez une API distante qui fera le test à distance.

Évidemment, il peut s'agir d'un service Web qui rend l'agent distant (selon votre suggestion) pour exécuter le test sur une machine distante. C'est bon, mais j'aime plus les solutions d'agent moins ou semi-agent. Qu'est ce que je veux dire? Si, par exemple, votre machine distante est UNIX, vous pouvez effectuer une connexion SSH ou Telnet et exécuter la ligne de commande. Dans ce cas, vous pouvez créer un script MVN ou Ant, copier à la machine distante à l'aide de SSH, puis exécutez-la. Le script exécutera vos tests. Donc, c'est presque l'agent moins. Vous avez juste besoin de Java Installation et SSH Support.

Si la machine distante est Windows, vous pouvez utiliser Telnet ou WMI. Donc, si la sécurité n'est pas un problème, mais vous avez besoin d'une prise en charge croisée de la plate-forme Telnet.

S'il vous plaît n'hésitez pas à me contacter si vous avez besoin de plus d'aide concernant SSH / Telnet.


1 commentaires

Merci. Nous exécutons déjà des tests sur les machines distantes en utilisant UNIX Tools and Ant. Mais l'expérience de développement serait bien meilleure si vous pouvez exécuter le test directement à partir de l'IDE (et les déboguer facilement) et obtenir la "barre verte" directement à côté du code (pas sur une page Web à ouverture séparément comme Hudson / Jenkins).



4
votes

Comment vous accomplir cela dépend beaucoup de ce serveur d'intégration et IDE que vous utilisez, et ce que vous êtes application est. Je suppose que vous utilisez Eclipse; et je suppose que vous utilisez Jenkins , car il sera l'OMI le plus facile à obtenir pour quoi faire vous voulez.

La plupart de cela fonctionnera hors de la boîte. Cependant, il y a un peu qui nécessitera une partie de travail supplémentaire.

Vous aurez envie de faire ce qui suit:

  1. Mettre en place un emploi dans Jenkins nommé quelque chose comme « Test intégré » (le nom n'a pas d'importance). Configurer pour exécuter les tests que vous voulez être en mesure d'exécuter à partir de votre IDE, et pour permettre aux machines à distance de déclenchement construit.
  2. ce travail un emploi paramétrées, et ajouter un paramètre de fichier. Laisse supposer ce qu'on appelle « TestingProgram ». Ce sera le programme que le travail testera.
  3. l'utilisation du travail intégré Test le fichier TestingProgram pour exécuter les tests. Si vous êtes programme nécessite plus d'un fichier, que de supposer que ce sera un fichier zip contenant tous les fichiers nécessaires.
  4. Configurer votre projet Eclipse pour produire ces mêmes fichiers (s) qui, selon le travail de tests d'intégration (je suppose que cela est déjà le cas, car il est construit probablement une sorte de version bin de votre programme)

    Maintenant vient la partie un peu plus compliqué d'accrochage Eclipse à Jenkins. Malheureusement, je ne pense pas qu'il y ait des outils pré-existantes qui vont faire exactement ce que vous voulez. Les bonnes nouvelles sont qu'il devrait être très simple à réaliser avec un script personnalisé. Tout le script doit faire est:

    1. Si votre programme a plusieurs fichiers nécessaires, et éclipse ne le font pas déjà, il devra zip ces fichiers jusqu'à
    2. Il devra prendre le fichier et le lire dans une variable, puis base64 encoder. Il y a beaucoup de bibliothèques qui prendra soin de la plupart de cela pour vous, par exemple celui-ci . Permet d'assumer ce fichier est lu dans une variable appelée ProgramFile $
    3. Il devra envoyer une requête HTTP http: // : 8080 / / buildwithparameters TestingProgram = $ ProgramFile < / li>

      Vous pouvez lire plus sur le déclenchement à distance avec Jenkins construit des paramètres dans la docs jenkins.

      Le script qui accomplit ces étapes peuvent être à peu près tout. Étant donné que vous souhaitez intégrer à terme dans votre IDE, il semble que les choix les plus logiques serait un script fourmi ou un plug-in Eclipse. Ni serait trop compliqué - le script fourmi juste faire ces étapes, et vous pouvez importer le script ant dans un projet Eclipse spécialement pour faire des tests - et un plugin pourrait simplement ajouter un élément de menu qui, lorsqu'il est exécuté dans un projet, exécuterait les étapes ci-dessus pour ce projet.

      Remarque: Il y a en fait plusieurs façons de déclencher une compilation avec des paramètres à l'aide de Jenkins. Par exemple, vous pouvez faire une requête POST, l'utilisation JSON pour passer le paramètre tel que décrit dans les jenkins docs I liés à, utilisez le Jenkins CLI, etc. ne sont pas tous d'entre eux travaillent avec des paramètres de fichier, mais vous les utiliser tous dans un manière très similaire - comme une étape dans votre script personnalisé, vous exécuterait une construction à distance sur Jenkins, et de transmettre le fichier que vous souhaitez utiliser pour tester avec. Par exemple, l'explication que je donnai suppose que le fichier de test est très faible; si ce n'est pas le cas, vous pouvez faire une requête POST à ​​la place. Si vous rencontrez des problèmes à l'aide d'une méthode, il devrait être assez facile de passer à utiliser une autre méthode qui fonctionne mieux.


0 commentaires

2
votes

Je ne l'ai pas fait moi-même (mes tests sont locaux), mais voici quelques affaires qui pourraient fonctionner:

  • cargo peut être utilisé pour exécuter un serveur et déployer des modules dans celui-ci
  • L'exécution des tests peut être effectué à l'aide de cactus (assez ancien) ou de junitee. Dans les deux cas, vous implémentez les tests en utilisant JUnit et les exécutez à distance. Une autre option consiste à écrire les tests pour interagir avec une API dédiée sur votre serveur qui exécute les tests et les rapports de retour.

0 commentaires

2
votes

Dans ma solution, je vais déjeuner un serveur JNDI local et ajouter un objet distant (un objet implémente l'interface distante), puis vous pouvez utiliser l'objet distant pour synchroniser votre IDE local et votre serveur distant ou autre endroit.


0 commentaires