Se è possibile allontanarsi senza utilizzare un processo esterno, farlo.
Tuttavia, ci sono situazioni in cui questo è complicato e si desidera veramente utilizzare il processo, ad esempio, si desidera testare l'interfaccia della riga di comando di un eseguibile C.
input dell'utente
Usa subprocess.Popen
come in:
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()
Non c'è alcuna differenza tra prendere l'input da un utente e prendendolo da un tubo per l'ingresso fatto con metodi come raw_input
o sys.stdin.read()
.
file
Creare una directory temporanea e creare i file che si desidera leggere da lì il tuo test setUp
metodi:
tdir = tempfile.mkdtemp(
prefix = 'filetest_',
)
fpath = os.path.join(tdir,'filename')
fp = open(fpath, 'w')
fp.write("contents")
fp.close()
fare la lettura del file nelle prove .
Rimuovere la directory temp in seguito.
shutil.rmtree(tdir)
E 'la lettura piuttosto complicato da file, e la maggior parte dei programmi in grado di leggere sia da file o da STDIN (ad esempio con fileinput
). Quindi, se quello che vuoi testare è ciò che accade quando viene inserito un determinato contenuto e il tuo programma accetta STDIN, usa semplicemente Popen
per testare il programma.
variabili d'ambiente
- Impostare le variabili d'ambiente con
os.environ["THE_VAR"] = "the_val"
- Unset loro con
del os.environ["THE_VAR"]
os.environ = {'a':'b'}
non funziona
- Quindi chiamare
subprocess.Popen
. L'ambiente è ereditato dal processo chiamante.
Codice Template
Ho un modulo su my github che mette alla prova STDOUT
, STDERR
e lo stato di uscita data STDIN
, argomenti della riga di comando e l'ambiente. Inoltre, controlla i test per quel modulo sotto la directory "tests". Ci devono essere moduli molto migliori là fuori per questo, quindi prendi il mio solo per scopi di apprendimento.
fonte
2013-04-08 08:14:14
controllare se ho capito la tua domanda correttamente: ciò che si vuole sapere è: come verificare se un eseguibile/script, dato alcuni input come ad esempio le variabili standard input/ambiente dà i risultati attesi , come lo stato stdout, stderr o exit? –