cProfile モジュールが unittest で動作しないのはなぜですか? 質問する

cProfile モジュールが unittest で動作しないのはなぜですか? 質問する

私はユニットテストをプロファイルするために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)

おすすめ記事