тестирование интерактивных программ на питоне - PullRequest
10 голосов
/ 17 января 2011

Хотелось бы узнать, какие инструменты тестирования для python поддерживают тестирование интерактивных программ. Например, у меня есть приложение, запущенное:

$ python dummy_program.py 

>> Hi whats your name? Joseph

Я бы хотел инструмент Joseph, чтобы я мог имитировать это интерактивное поведение.

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Если вы тестируете интерактивную программу, рассмотрите возможность использования ожидайте .Он разработан специально для взаимодействия с консольными программами (хотя, скорее, для автоматизации задач, а не для тестирования).

Если вам не нравится язык, основанный на (tcl), вы можете попробовать pexpect который также облегчает взаимодействие с консольной программой.

1 голос
/ 17 января 2011

Лучшей вашей ставкой, вероятно, является внедрение зависимостей, так что то, что вы обычно берете из sys.stdin (например), на самом деле является переданным объектом. Поэтому вы можете сделать что-то вроде этого:1003 * К счастью, Python делает это довольно легко.Вот более подробная ссылка на пример насмешливого ввода: http://konryd.blogspot.com/2010/05/mockity-mock-mock-some-love-for-mock.html

0 голосов
/ 12 июня 2019

Хорошим примером может служить файл test_embed.py пакета IPython.

Используются два различных подхода:

подпроцесс

import subprocess
# ...
subprocess.Popen(cmd, env=env, stdin=subprocess.PIPE,
                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate(_exit_cmd_string)

pexpect (как уже упоминалось Брайан Оукли

import pexpect
# ...
child = pexpect.spawn(sys.executable, ['-m', 'IPython', '--colors=nocolor'],
                          env=env)
# ...
child.sendline("some_command")
child.expect(ipy_prompt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...