Python用のvscodeの設定方法(テスト,カバレッジ,プロファイリング)



1 . Python拡張モジュールのインストール
入手可能here またはpython 拡張セクションで.

プロジェクトの整理
まず最初に新しい仮想環境を使うべきです.
使用virtualenv コマンドラインツールを使用することができますvirtualenv -p3.9 .venv3.9 新しいPython 3.9環境を定義します.vscodeはこの環境に切り替えたいかどうかをプロンプトを表示します.「はい」を選択します.
プロジェクト自体は次のような構造を使用します.
project_directory
+-- my_module
|   +-- __init__.py
|   +-- __main__.py
|   +-- script.py
+-- tests
    +-- __init__.py
    +-- test_script.py

コードの実行
プロジェクト構造が使用するように__init__.py ファイルをモジュールとして実行する必要があります.python -m my_module . VSCodeデバッグ構成をこのモジュールベースの方法に適応することもできます.
「実行設定」タブで「設定を追加」をクリックすると、次のような構造体を追加または編集できます.
"configurations": [    
        {
            "name": "My Python Module",
            "type": "python",
            "request": "launch",
            "module": "my_module"
        }
    ]

テスト
私は、vscodeでテストするためにpytestを使います.Python拡張モジュールのテストを構成し、PyTestを選択し、命名規則を使用するようにPyTestを設定するようにしてください.たとえば、あなたのテストファイルを何かのように呼ぶならtest_script.py ここでscript あなたがテストしているものを示しますtest_*.py .

4.1テストの定義
私は以下の構造を使います
import unittest
from my_module.script import add_func

class TestScript(unittest.TestCase):
    def test_add(self):
        result = add_func(1,2)
        self.assertEqual(result, 3)

4.2実行中のテスト
端末からテストを実行するにはpytest .
別の方法として、Vscode拡張モジュールのアイコンを使用し、対応するサイドバータブの[実行]シンボルをクリックしてすべてのテストを実行できます.

4.3テスト報道
  • ランpytest --cov=main_module --cov-report=xml tests
  • --cov=main_module のカバレッジを有効にするmain_module
  • --cov-report=xml カバレッジを生成します.XMLファイル
    vscode拡張モジュールで使用するcoverage gutters .
  • デバッグ機能を壊したように、これらの引数をvscode経由でPyTestに渡すことはありません.

  • プロファイリング
    私は以下を使用します__main__.py :
    import cProfile
    from pstats import Stats, SortKey
    
    from my_module.script import add_func
    
    
    def run_script():
        print(add_func(2,1))
    
    
    if __name__ == '__main__':
        do_profiling = True
        if do_profiling:
            with cProfile.Profile() as pr:
                run_script()
    
            with open('profiling_stats.txt', 'w') as stream:
                stats = Stats(pr, stream=stream)
                stats.strip_dirs()
                stats.sort_stats('time')
                stats.dump_stats('.prof_stats')
                stats.print_stats()
        else:
            start_game()
    
    その後、ツールを使用することができますSnakeViz 実行してブラウザで結果を視覚化するにはsnakeviz program.prof .

    他の便利な拡張

  • todo tree きちんとした木構造であなたのTodosを組織してください、todoキーワードはカスタマイズされることができます