Python Nose: записывает результаты тестов в файл с плагином Multiprocess

Я пытаюсь выполнить вывод моих тестов в файл, а также запустить их одновременно. Для этого я пытаюсь использовать многопроцессорный плагин и плагин xunit.

Мне известно, что они не работают вместе, xunit ничего не записывает, потому что mutiprocess не отправляет результат напрямую.

https://github.com/nose-devs/nose/issues/2

Что я ищу - это любая альтернатива, которая позволяет мне записывать вывод в файл. Причина в том, что Im работает Selenium Tests, и каждый раз, когда я получаю сообщение об ошибке, stacktrace настолько велика, что stdout в основном полностью заполняется. Что-то, что облегчает, также может помочь, документация селена довольно мало о том, как настроить вывод журнала.

Я также попробовал довольно базовое перенаправление stdout:

#nosetests > file.txt

Но это тоже не работает.

Ответ 1

Если вы хотите использовать базовое перенаправление из оболочки, вы можете сделать

nosetests &> output.txt

Но по вашему вопросу кажется, что вы скорее сделаете что-то вроде:

$nosetests --processes 4 --with-xunit --xunit-file=test_output.xml

Полный пример:

$ls
test_nose.py    test_nose.pyc

$cat test_nose.py

import sys
import os
import time

def setUp():
    pass

def test_1():
    time.sleep(5)
    with open('test_pid_' + str(os.getpid()), 'w') as f:
        f.write(str(os.getpid()) + '\n')

def test_2():
    time.sleep(5)
    with open('test_pid_' + str(os.getpid()), 'w') as f:
        f.write(str(os.getpid()) + '\n')

def test_3():
    time.sleep(5)
    with open('test_pid_' + str(os.getpid()), 'w') as f:
        f.write(str(os.getpid()) + '\n')

def test_4():
    time.sleep(5)
    with open('test_pid_' + str(os.getpid()), 'w') as f:
        f.write(str(os.getpid()) + '\n')

def tearDown():
    pass

$ nosetests --processes 4 --with-xunit --xunit-file=test_output.xml
....
----------------------------------------------------------------------
Ran 4 tests in 5.223s

OK

$ ls
test_nose.py    test_output.xml test_pid_55247  test_pid_55249
test_nose.pyc   test_pid_55246  test_pid_55248

$ cat test_pid*
55246
55247
55248
55249

$ xmllint -format test_output.xml 
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="nosetests" tests="0" errors="0" failures="0" skip="0"/>

Похоже, он не работает, как вы сказали:)

Но

$nosetests --processes 4 &> output.txt

и

$nosetests --with-xunit --xunit-file=test_output.xml

Do.

Литература:

Перенаправить stderr и stdout в Bash script

$man xmllint

$nosetests -h