2

py.testPyCharm では、デフォルトのテスト ランナーとしてセットアップします。

私は簡単なテストケースを持っています:

import unittest
import time

def my_function():
   time.sleep(0.42)

class MyTestCase(unittest.TestCase):

    def test_something(self):
        my_function()

ここで、ファイルを右クリックしてProfile 'py.test in test_profile.py'.

コンソールでテストが正常に実行されていることを確認します (と表示されますcollected 1 items)。ただし、Statistics/Call Graph生成された pstat ファイルを表示するビューは空で、Nothing to show.

test_somethingとのプロファイリング情報が表示されることを期待していますmy_function。私は何を間違っていますか?

編集 1 : ファイルの名前を で始まらないものに変更しtest_、 を削除してを呼び出すメソッドをunittest.TestCase挿入すると、最終的に py.test なしで cProfile を実行でき、結果が表示されます。__main__my_function

ただし、私は大量のテストを含む大規模なプロジェクトに取り組んでいます。追加のプロファイリング スクリプトを作成する代わりに、これらのテストを直接プロファイリングしたいと考えています。py.testプロジェクトのすべてのテストを再帰的に取得できるように、テスト検出モジュールを呼び出す方法はありますか? (unittestによって認識されないジェネレーター関数で多くのパラメーター化されたテストを生成するため、発見は十分ではありませんunittest)。このようにして、少なくとも 1 つのスクリプトを追加するだけで問題を解決できました。

4

1 に答える 1

0

これが回避策です。次の内容で追加の python スクリプトを作成します (それに応じて tests-root へのパスを調整します)。

import os
import pytest

if __name__ == '__main__':
    source_dir = os.path.dirname(os.path.abspath(__file__))
    test_dir = os.path.abspath(os.path.join(source_dir, "../"))
    pytest.main(test_dir, "setup.cfg")

スクリプトのファイル名は で始まらないでください。そうしないとtest_、pycharm によってpy.test. 次に、ファイルを右クリックして、Profile.

これは、 で実行する場合にも便利ですCoverage

于 2015-09-07T10:50:24.730 に答える