Si vous pouvez vous en sortir sans utiliser de processus externe, faites-le.
Cependant, il y a des situations où cela est compliqué, et vous voulez vraiment utiliser un processus, par exemple, vous voulez tester l'interface de ligne de commande d'un exécutable C.
Entrée utilisateur
Utilisation subprocess.Popen
comme dans:
process = subprocess.Popen(
command,
shell = False,
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
universal_newlines = True
)
stdout, stderr = process.communicate("the user input\nline 2")
exit_status = process.wait()
Il n'y a pas de différence entre la prise d'entrée d'un utilisateur et le prendre à partir d'un tuyau d'entrée fait avec des méthodes telles que raw_input
ou sys.stdin.read()
.
Fichiers
Créez un répertoire temporaire et créer les fichiers que vous souhaitez lire là-bas sur votre test setUp
méthodes:
tdir = tempfile.mkdtemp(
prefix = 'filetest_',
)
fpath = os.path.join(tdir,'filename')
fp = open(fpath, 'w')
fp.write("contents")
fp.close()
Est-ce que le fichier à lire dans les tests .
Supprimez ensuite le dossier temp.
shutil.rmtree(tdir)
Il est assez compliqué la lecture de fichiers, et la plupart des programmes peuvent lire soit à partir de fichiers ou de STDIN (par exemple avec fileinput
). Donc, si ce que vous voulez tester est ce qui se passe quand un certain contenu est entré, et votre programme accepte STDIN, utilisez simplement Popen
pour tester le programme.
Variables d'environnement
- Définissez les variables d'environnement avec
os.environ["THE_VAR"] = "the_val"
- Désarmer les avec
del os.environ["THE_VAR"]
os.environ = {'a':'b'}
ne fonctionne pas
- Ensuite, appelez
subprocess.Popen
. L'environnement est hérité du processus appelant.
Code modèle
J'ai un module sur my github qui teste STDOUT
, STDERR
et l'état de sortie donné STDIN
, les arguments de ligne de commande et enviroment. Vérifiez également les tests de ce module dans le répertoire "tests". Il doit y avoir beaucoup de meilleurs modules pour cela, alors prenez le mien juste pour apprendre.
vérifier si je comprends bien votre question: ce que vous voulez savoir est: comment tester si un fichier exécutable/script, compte tenu de certains facteurs de production tels que les variables stdin/environnement donne les résultats escomptés , comme stdout, stderr ou le statut de sortie? –