はじめに
当稿は、すぐ忘れるスキップの記述を、すぐ思い出せるようにまとめたもの。
pythonの自動テストに関わるツール
プロジェクトで以下のツールを使っている。
- pytest
- メインのテスト
- 実際に機能をテスト
- autopep8
- ソースをPEP8に準拠するように整形
- 意外と役に立ってない印象
- flake8
- PEP8に準拠できてるかチェック
- 100%準拠ではないとおもうが、結構これに従って作ってるだけできれいになる
- mypy
- 引数やクラスの互換に間違いがないかのチェック
- プロジェクトではTypeHint(引数の明示的型指定)を指定してるので、その間違いをチェックしてくれる
- bandit
- セキュリティ的に問題あるかのチェック
たまにチェックが邪魔なときがある
- pytest
- 修正中とかで絶対テストコードがエラーになることが分かってるので、このケースはスキップしたいなど
- flake8
- flake8:「おまえのコード複雑過ぎ。シンプルにしろや」
- 関数を分割したりと言うのがよくある対処
- それでやると、「たったこれだけのことでメソッドつくるの?」となる事がよくある
- flake8:「おまえのコード複雑過ぎ。シンプルにしろや」
- bandit
- bandit:「セキュリティ的にあかんのじゃ。なんとかしろや」
- 「ここは絶対大丈夫なんで勘弁してほしい」というところがある
- パフォーマンスチューニングで陥った経験あり
- 「ここは絶対大丈夫なんで勘弁してほしい」というところがある
- bandit:「セキュリティ的にあかんのじゃ。なんとかしろや」
それぞれのスキップ方法
pytest
@pytest.mark.skip # FIXME マルチスレッドでテストが落ちているのを一時的にskipしている
def test_success(self):
"""テスト
"""
スキップを示すアノテーションを指定することで、スキップできる。
後ろのコメントは、忘れないように習慣的にそう書いているだけ。
flake8
def foo(bar: Bar, # noqa: C901, R701
bar_bar: BarBar) -> str:
"""関数
"""
上記は、対象のメソッドでは、C901とR701のチェックをしないという意味。
単に# noqa
とした場合は、flake8のチェック全てがされない。
bandit
def foo(bar: Bar, # nosec
bar_bar: BarBar) -> str:
"""関数
"""
上記は、対象のメソッドでは、banditのチェックをしないという意味。