私はユニットテストをプロファイルするためにcProfileモジュールを使いたいのですが、
python -mcProfile mytest.py
「0.000秒で0テストを実行しました」という結果が出ました。mytest.pyのソースコードはこちらです。
import unittest
class TestBasic(unittest.TestCase):
def testFoo(self):
assert True == True
if __name__ == '__main__':
unittest.main()
他のより複雑なユニットテストでもテストしました。cProfile で実行すると、常に「Ran 0 tests」が表示されます。助けてください。
アップデート:私の OS は Python 2.7 が組み込まれた MacOS 10.7 です。同じコードは Ubuntu でも正常に動作します。
ベストアンサー1
テストのコンストラクタで cProfiler を初期化し、デストラクタでプロファイル データを使用する必要があります。私は次のように使用します。
from pstats import Stats
import unittest
class TestSplayTree(unittest.TestCase):
"""a simple test"""
def setUp(self):
"""init each test"""
self.testtree = SplayTree (1000000)
self.pr = cProfile.Profile()
self.pr.enable()
print "\n<<<---"
def tearDown(self):
"""finish any test"""
p = Stats (self.pr)
p.strip_dirs()
p.sort_stats ('cumtime')
p.print_stats ()
print "\n--->>>"
def xtest1 (self):
pass
テストが入力を待機する場合は、self.pr.disable()
その呼び出しの前に を呼び出し、その後で再度有効にする必要があります。
pytest
メソッド名が少し異なることを希望する場合は、次のようになります。
import cProfile
import time
class TestProfile:
""" test to illustrate cProfile usage """
def setup_class(self):
self.pr = cProfile.Profile()
self.pr.enable()
def teardown_class(self):
self.pr.disable()
self.pr.print_stats(sort="tottime")
def test_sleep(self):
time.sleep(2)