Pythonで書いたE2E自動テストのコードも静的にチェック&フォーマットしましょう【VSCode】


背景

プロダクトのコードを書く方は開発中にエディタ側で保存時のフォーマット&静的チェックをされているのが普通かと思います。

一方、テスターやテストエンジニアの方々がGUI操作する自動テストにチャレンジするぞ!となったときにこのへん抜けがちなので、紹介がてら記事に起こしてみました。

この記事を参考にするとできること

自動テストのコードを書いている際、保存するたびに

  • 空白行やスペースの有無、長すぎる行の改行など、一定のルールに沿った形に自動で整形(=フォーマット)してくれる
  • 冗長な書き方の指摘や、使われていないモジュール・変数の指摘をしてくれる

状態を実現できます。

結果、複数人で自動テストのコーディングをしている場合には、それぞれの書く自動テストコードの見た目がある程度統一され&無駄な行が減り、読み書きがしやすくなります。

今回はPythonのコーディング規約であるPEP8を(基本的には)守った形になるように設定していきます。

環境

  • Windows10Pro
  • VSCode 1.40
  • Python 3.7.2

手順

1. 必要なものをインストール

以下コマンドを実行して、flake8とautopep8をインストールしてください。

> pip install flake8
> pip install autopep8

2. VSCodeの設定

settings.jsonに記載されている既存の設定に、以下を追記。もしくは、項目がすでにあれば上書き。

{
    "editor.formatOnSave": true,
    "python.linting.pylintEnabled": false,
    "python.linting.enabled": true,
    "python.linting.flake8Enabled": true,
    "python.linting.flake8Args": [
        "--ignore=E501"
    ],
    "python.formatting.autopep8Args": [
        "--max-line-length=200",
    ]
}
  • editor.formatOnSave : ファイル保存時に自動でフォーマットするかどうか
  • python.linting.pylintEnabled: pylintを使うかどうか
  • python.linting.enabled: lintするかどうか
  • python.linting.flake8Args: flake8に渡すパラメータ。今回の--ignore=E501は、E501の「行が長すぎる」という指摘を回避
  • python.formatting.autopep8Args : autopep8に渡すパラメータ。今回の--max-line-length=200は改行の制限を200文字設定

ここまでできれば、あとはVSCodeでコードを保存した際に自動でフォーマット&問題点を指摘してくれるようになります。

3. 指摘を見る

画面下の「問題」というタブのところに、指摘内容が表示されます。

もし出てこない場合は、左下の×や△のマークのところをクリックしてみてください。

システムテストの自動テストコードで困るパターン

プロダクトの開発チームと同じルールで自動テストコードを書くことができれば、自動テストのメンテナンスができる人が増えるので都合が良いです。

しかし、プロダクトのコーディング規約に則って自動テストのコードを書こうとすると困る場面も出てきます。

例えば、1行の文字数の制限。開発時はあまりに横長だと適切な改行を入れることが求められます。今回使用しているautopep8では、デフォルトで79文字におさまるように自動で改行するようになっています。

が、Seleniumで自動テストを書いていて、やむなく長ったらしいxpathを指定しなければいけない・・・なんて場合には、変に改行されるよりも横に伸ばしておいたほうが見やすい、ということも。

そのため、今回は行の文字数の制限を200に変えてあります。ここはお好みで調整してください。

参考