2010-02-16 5 views
1

J'ai un bâtiment du projet Python avec Hudson. La plupart des tests unitaires fonctionnent correctement, mais tous les tests qui nécessitent écrire dans le système de fichiers (j'ai une classe qui utilise des fichiers tar, par exemple) ne peuvent pas trouver le répertoire tmp que j'ai configuré pour le traitement intermédiaire (mes méthodes tearDown supprimer tous les fichiers sous le répertoire tmp).Hudson incapable de naviguer dans les répertoires relatifs

Voici ma structure de projet:

  • src
    • essais
      • accessoires (fichiers statiques ici)
      • unitaires
      • (tests unitaires ici)
    • tmp

Voici un exemple d'erreur:

OSError: [Errno 2] No such file or directory: '../../tmp' 

Je suppose que cela se produit parce que Hudson ne traite pas les fichiers alors que dans le répertoire unité, mais plutôt un autre répertoire de travail.

Quel est le répertoire de travail de Hudson? Peut-il être configuré? Les chemins relatifs peuvent-ils fonctionner?

Répondre

1

Je ne sais pas comment vous initialisez votre espace de travail, mais en général, cela se fait en vérifiant que votre projet est hors contrôle de version dans l'espace de travail. Si cela est vrai dans votre cas, le plus simple est d'ajouter votre répertoire tmp au contrôle de version (par exemple, avec un fichier README, si votre système de contrôle de version ne supporte pas les répertoires). Ensuite, le répertoire tmp sera extrait dans votre espace de travail et les choses devraient fonctionner à nouveau.

+0

J'ai ajouté le répertoire tmp manuellement car mes tests unitaires le nettoient à chaque tearDown. J'ai également veillé à appeler nosetests avec le drapeau -w: nosetests -w tests/unit --with-xunit –

+1

Si c'est vraiment un répertoire temporaire qui est seulement utilisé par le test, il doit être créé par le setUp et supprimé par le tearDown de ce même test. Je refuse toujours d'ajouter des répertoires temporaires ou de résultats au SCM. – cringe

+0

@cringe - Bon conseil; J'ai révisé mes tests unitaires pour utiliser un répertoire tmp approprié au lieu de celui associé à un code source. –

0

Je ne sais pas anyhting sur Hudson, mais c'est ce que je fais pour assurer, ce chemin relatif travaillent droite:

os.chdir(os.path.dirname(sys.argv[0])) 
2

Chaque emploi à Hudson possède son propre répertoire de travail, à /path/to/hudson/jobs/[job name]/workspace/

Pour les travaux individuels, vous pouvez définir l'option "Utiliser espace de travail personnalisé" (sous "Options de projet avancées") pour définir l'emplacement de l'espace de travail. Je suppose que cela dépend de la façon dont vos tests sont exécutés, mais si vous inspectez l'espace de travail du travail, vous devriez être capable de trouver où Hudson écrit les fichiers.