2009-10-09 7 views
1

Je suis en train de créer un test qui va effectuer des tests de stress de l'application qui parle à une base de données Postgres. Afin de le rendre réplicable, je voudrais recréer la base de données à chaque exécution. La méthode de démarrage décorée avec l'annotation org.junit.Before supprimera la base de données (si elle existe) et la restaurera à partir d'un fichier de vidage. Faire ce formulaire shell/commande est trivial:Comment exécuter un script shell sur une machine distante à partir de Java?

psql -f db.out newdb 

ou quelque chose le long de ces lignes. Étant donné que le test peut être effectué sur une JVM qui n'est pas exécutée sur la même machine qui héberge la base de données, je me demande s'il est possible d'appeler un script shell/batch sur une machine distante à partir de Java.

Merci

Répondre

4

Si vous avez connaissance des détails de la machine (nom d'hôte, login, mot de passe), la seule chose que je peux penser au moment utilise un Java SSH library pour se connecter à la boîte et exécuter cette commande.

Ou vous pouvez écrire un script sur votre machine locale qui a exécuté le script sur la machine distante avec les paramètres corrects.

C'est le moyen le plus simple que je puisse penser de toute façon!

2

Si la configuration de SSH est trop complexe, vous pouvez écrire un petit programme Java qui écoute les connexions sur un socket, puis exécute le script. Installez cela sur le serveur Postgres et connectez-vous dans le cas de test. Cela dit, je suggère d'installer une copie de Postgres sur chaque machine de développement. Cela rendrait vos tests beaucoup plus rapides et vous n'obtiendriez pas de fausses erreurs lorsque deux développeurs exécuteraient les tests en même temps. De plus, vous n'aurez pas d'erreurs à cause de problèmes de réseau, parce que quelqu'un fait de la maintenance sur le serveur, parce que le développeur X a changé le schéma DB, etc

+0

Merci de m'avoir donné une idée. Chaque test peut recréer un schéma db avec un nom unique basé sur l'adresse IP de la machine hôte JVM et l'heure actuelle en millisecondes. –

+0

Pourquoi ne pas utiliser le nom du développeur à la place? Cela rendrait beaucoup plus simple pour eux de déboguer la base de données en cas d'erreur. –