Script de test de nez avec des arguments de ligne de commande
Je voudrais être en mesure d'exécuter un nez script de test qui accepte les arguments de ligne de commande. Par exemple, quelque chose le long des lignes de:
test.py
import nose, sys
def test():
# do something with the command line arguments
print sys.argv
if __name__ == '__main__':
nose.runmodule()
Cependant, chaque fois que je l'exécute avec un argument de ligne de commande, j'obtiens une erreur:
$ python test.py arg
E
======================================================================
ERROR: Failure: ImportError (No module named arg)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/nose-0.11.1-py2.6.egg/nose/loader.py", line 368, in loadTestsFromName
module = resolve_name(addr.module)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/nose-0.11.1-py2.6.egg/nose/util.py", line 334, in resolve_name
module = __import__('.'.join(parts_copy))
ImportError: No module named arg
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
Apparemment, le nez essaie de faire quelque chose avec les arguments passés en sys.argv. Est-il un moyen de faire de nez ignorer ces arguments?
source d'informationauteur dzhelil
Vous devez vous connecter pour publier un commentaire.
Bien, je déteste "pourquoi voudriez-vous faire cela?", les réponses tout autant que n'importe qui, mais je vais avoir à faire ici. J'espère que vous n'avez pas l'esprit.
Je dirais que faire ce que vous êtes désireux de le faire n'est pas dans le champ d'application du cadre de nez. Le nez est prévu pour automatisé tests. Si vous devez passer en arguments de ligne de commande pour le test à passer, alors il n'est pas automatisé. Maintenant, ce que vous peut faire est quelque chose comme ceci:
Si vous exécutez, vous obtenez ce résultat:
(N'oubliez pas de passer dans l'-s option si vous voulez voir ce qui se passe sur la sortie standard stdout)
Cependant, je serais probablement encore recommandons contre que, comme c'est généralement une mauvaise idée de jouer avec l'état global dans les tests automatisés si vous pouvez l'éviter. Ce que je pourrais probablement faire, c'est adapter le code que je suis désireux de tester de prendre un
argv
liste. Ensuite, vous pouvez passer dans tout ce que vous voulez pendant les essais et le passer danssys.argv
dans la production.Mise à JOUR:
On dirait que vous voulez essayer votre main à l'écriture d'un nez plugin. C'est assez facile à faire. Voici les derniers docs.
Vous pourriez utiliser un autre moyen de mettre des choses dans votre code:
Alors n'oubliez pas de configurer votre environnement avant de lancer le nez.
Je pense que c'est parfaitement acceptable scénario. J'ai aussi besoin de faire quelque chose de similaire afin de pouvoir exécuter les tests de comparaison de différents scénarios (dev, qa, prod, etc) et il me fallait le droit des URL et des configurations pour chaque environnement.
La solution que j'ai trouvé est d'utiliser le nez-testconfig plugin (lien ici). Ce n'est pas exactement passage d'arguments de ligne de commande, mais la création d'un fichier de configuration avec tous vos paramètres, et en passant ensuite ce fichier de configuration comme argument lors de l'exécution de votre nez-tests.
Le fichier de configuration a le format suivant:
Et vous pouvez lire les arguments à l'aide de:
Pour l'instant, je suis en utilisant la suite de hack:
qui se contente de lire l'argument dans une variable locale, et supprime tous les arguments supplémentaires en
sys.argv
de sorte que le nez ne pas confondre par eux.Juste courir le nez et en lui passant des paramètres ne fonctionnent pas comme le nez va tenter d'interpréter les arguments nez paramètres de sorte que vous obtenez les problèmes que vous voyez.
Je ne pense pas que le nez de soutien passage de paramètres directement encore, mais ce nez plug-in nez-testconfig vous Permet d'écrire des tests comme ci-dessous: