基本
pytest test_sample.py::test_<名前> でテスト関数やクラスを指定して実行できる
- テストディスカバリの検出対象
- ファイル名
test_なんとか.py なんとか_test.py
- メソッド/関数名
test_なんとか
- クラス名
Testなんとか
assert actual == expected
コマンドライン引数
-k なんとか でマッチするテストケースを絞って実行できる
-r reason系を表示する
-ra は all except passed で、パスしてないものだけ実行する
—lf 失敗したテストだけ実行
-x 失敗したらすぐ止める
設定ファイル
pytest.ini に設定書ける
- addopts に
--strict-markers, --strict-config, -ra を 指定するのがオススメらしい
tests/__init__.py を置いとくとテストファイル名が重複しても大丈夫
src, tests のようにディレクトリ分けるなら、pytest.ini に testpaths = tests, pythonpath = src を書いておくとよい。tests 実行時に src が sys.path に追加される
fixture
- テスト関数の前後(setup, teardown) で実行する共通処理
@pytest.fixture(scope='function', autouse=False) fixture 関数 or メソッドを修飾する
test_hoge(fixture_value) と書くと、fixture で修飾された fixture_valueを pytest が探してくれる
fixture_value は修飾する関数が返すオブジェクト
- 普通の関数 or メソッドなら戻り値をバインド
- ジェネレータなら
yield の値をバインド
- ただし、
yield が2回以上登場するとエラー
Failed: fixture function has more than one 'yield':
autouse=True なら書かなくても実行される
scope はフィクスチャ関数が実行されるスコープ。同じインスタンスが共有される
“function” , "class", "module", "package" , ”session” , 関数オブジェクトのいずれか
"package" , ”session” は conftest.py に書くと効く
- 関数オブジェクトで
"function" とか “module" を返して実行時にスコープが決まる
conftest.py に、そのディレクトリ以下で使う共通のフィクスチャを書く
- pytest のローカルプラグインなので、import する必要はない