Python Nose:Multiprocess Pluginを使ってファイルに結果を記録する

テスト出力をファイルに記録すると同時に、それらを同時に実行しようとしています。 このImは、マルチプロセスプラグインとxunitプラグインを使用しようとしています。

彼らは一緒に仕事をしないことを知っています.xunitは何もログに記録しません。なぜなら、mutiprocessは出力を直接送信しないからです。

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

私が探しているのは、出力をファイルに書き留めることができる代替方法です。 その理由は、私がSelenium Testを実行していることです。エラーが発生するたびに、stacktraceは非常に大きく、stdoutは基本的に完全に記入されています。 軽減するものも同様に助けになるかもしれませんが、セレンのドキュメントはログ出力を構成する方法についてはかなり不足しています。

私もstdoutのかなり基本的なリダイレクトを試みました:

#nosetests > file.txt

しかし、それはどちらもうまくいかない。

11

1 答え

あなたができるシェルからの基本的なリダイレクトを使いたいなら

nosetests &> output.txt

しかし、あなたの質問に基づいて、あなたはむしろ次のようなことをしたいと思う:

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

Full example:

$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"?>

あなたが言ったように動作しないように見えます:)

しかし

$nosetests --processes 4 &> output.txt

そして

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

行う。

参考文献:

Redirect stderr そして stdout in a Bash script

$man xmllint

$nosetests -h
15
追加された
ありがとう、それは完全に動作します!
追加された 著者 dgrandes,