Python Nose: протоколировать результаты тестов в файл с помощью Multiprocess Plugin - PullRequest
12 голосов
/ 06 февраля 2012

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

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

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

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

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

#nosetests > file.txt

Но это не такработать либо.

1 Ответ

15 голосов
/ 30 марта 2012

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

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

$man xmllint

$nosetests -h
...