pytest
を使用するとコンソールに出力されませんprint
。ドキュメンテーションデフォルトで動作するはずだと言っているようです。
pytest my_tests.py
このテストを実行するために使用しています:
import myapplication as tum
class TestBlogger:
@classmethod
def setup_class(self):
self.user = "alice"
self.b = tum.Blogger(self.user)
print "This should be printed, but it won't be!"
def test_inherit(self):
assert issubclass(tum.Blogger, tum.Site)
links = self.b.get_links(posts)
print len(links) # This won't print either.
標準出力コンソールには何も印刷されません (通常の進行状況と、合格/失敗したテストの数のみ)。
私がテストしているスクリプトには print が含まれています:
class Blogger(Site):
get_links(self, posts):
print len(posts) # It won't get printed in the test.
モジュールではunittest
、すべてがデフォルトで印刷されます。これはまさに私が必要としているものです。ただし、pytest
他の理由で使用したいと考えています。
印刷ステートメントを表示する方法を知っている人はいますか?
ベストアンサー1
デフォルトでは、py.test
標準出力の結果をキャプチャして、それをどのように印刷するかを制御できるようにします。これを行わないと、どのテストがそのテキストを印刷したかというコンテキストなしで、大量のテキストが吐き出されます。
ただし、テストが失敗した場合は、結果のレポートに、その特定のテストで標準出力に何が印刷されたかを示すセクションが含まれます。
例えば、
def test_good():
for i in range(1000):
print(i)
def test_bad():
print('this should fail!')
assert False
出力は次のようになります。
>>> py.test tmp.py
============================= test session starts ==============================
platform darwin -- Python 2.7.6 -- py-1.4.20 -- pytest-2.5.2
plugins: cache, cov, pep8, xdist
collected 2 items
tmp.py .F
=================================== FAILURES ===================================
___________________________________ test_bad ___________________________________
def test_bad():
print('this should fail!')
> assert False
E assert False
tmp.py:7: AssertionError
------------------------------- Captured stdout --------------------------------
this should fail!
====================== 1 failed, 1 passed in 0.04 seconds ======================
セクションに注意してくださいCaptured stdout
。
print
実行されたステートメントを確認したい場合は、-s
にフラグを渡すことができますpy.test
。ただし、解析が難しい場合があることに注意してください。
>>> py.test tmp.py -s
============================= test session starts ==============================
platform darwin -- Python 2.7.6 -- py-1.4.20 -- pytest-2.5.2
plugins: cache, cov, pep8, xdist
collected 2 items
tmp.py 0
1
2
3
... and so on ...
997
998
999
.this should fail!
F
=================================== FAILURES ===================================
___________________________________ test_bad ___________________________________
def test_bad():
print('this should fail!')
> assert False
E assert False
tmp.py:7: AssertionError
====================== 1 failed, 1 passed in 0.02 seconds ======================