pytest.main () захватывает стандартный вывод - PullRequest
0 голосов
/ 08 июня 2018

У меня есть метод, который я использую, чтобы получить все наши тесты.

def get_test_names_from_file():

    get_test_names = pytest.main(['--collect-only', '-q'])
    print(type(get_test_names))

    return 'here is the methods return: ' + str(get_test_names)

Когда я вызываю этот метод, он возвращает существующий код here is the methods return: 0, и это нормально.Чего я не могу понять, так это как получить полученный стандарт в формате, который я могу использовать.

Вот стандарт, когда вызывается метод:

test_a.py::TestA::test_general_a
test_a.py::TestA::test_python_a
test_a.py::TestA::test_python_learning_a
test_b.py::TestB::test_b

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

Спасибо за потраченное время.

РЕДАКТИРОВАТЬ: Мне удалось получить что-то работающее с использованием подпроцесса, но я бы предпочел использовать pytest, а не смешивать и сопоставлять:

def get_test_names_from_file():

    pytest_command_string = 'pytest --collect-only -q'
    pytest_command = subprocess.Popen(pytest_command_string.split(), shell=False, stdout=subprocess.PIPE)
    pytest_command_out = pytest_command.communicate()[0]

    print(type(pytest_command_out))
    return pytest_command_out

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете использовать py.io для этого.

что-то вроде:

capture = py.io.StdCapture()
pytest.main(['--collect-only', '-q'])
std, err = capture.reset()
print(std)

Получит вам стандартный вывод, который вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...