2022-08-02 15:32:23 +09:00

5.3 KiB

CRMデータ連携 データ取得処理 ECSタスク

前提事項

ツールのバージョン

  • Python 3.8.x
  • PipEnv(Pythonの依存関係管理用モジュール)

開発環境

  • Visual Studio Code

開発環境構築

※下記の操作は基本的にVSCode上で行います。

  • [ファイル]-[フォルダーを開く]から、当フォルダを選択して開く

  • Wiki | Pythonの環境構築にて、pyenvの導入まで完了させる

    • pyenvの導入はマストではないが、Pythonのバージョンが前提のバージョンと同一であることを確認して開発を進めてください
    • 確認しながら開発するのは煩わしいため、導入を強く推奨します。
  • ローカルのPythonでPipEnvをインストールする

    pip install pipenv
    
  • pipenvの仮想環境と依存パッケージをインストール。このとき、初回実行にはpythonの仮想環境のパスがターミナルに表示されるため、控えておく

    # 開発用パッケージも含めてインストール
    pipenv install --dev
    
  • VSCodeのコマンドパレットを[表示]-[コマンドパレット]から開き、Python: Select interpreterを選択して実行する

  • Pythonの実行環境を聞かれるため、先に控えたパスと一致するものを選択する

    • 出てこない場合、一度VSCodeを閉じて再度開き直す
  • 当フォルダ直下の.vscodeフォルダ内にあるrecommend_settings.jsonをコピーし、同フォルダ内にsettings.jsonを作成する

ローカルでの起動方法

  • 当フォルダ直下の.vscodeフォルダ内にlaunch.jsonを作成する

  • 以下のJSONを入力して保存する

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Python: Current File",
          "type": "python",
          "request": "launch",
          // エントリーポイントのファイルに変更すること
          "program": "<エントリーポイントになるファイル>",
          "console": "integratedTerminal",
          "justMyCode": true,
          // 環境変数が必要な場合に読み込む環境変数ファイル
          "envFile": "${workspaceFolder}/.env",
        }
      ]
    }
    
  • 環境変数が必要な場合、直接設定するか、上記JSONの"envFile"に設定されたパスに.envファイルを作成し、環境変数を入力する

  • キーボードの「F5」キーを押して起動する

    • デバッグモードで実行されるため、適当なところにブレークポイントを置いてデバッグすることができる

単体テストについて

前提

テスト環境構築

  • Pipenvの仮想環境下で、以下のコマンドを実行する
pipenv install --dev
  • .env.exampleをコピーし、同じ階層に.envを作成する
  • .envの以下に示す環境変数の値をDeveloper組織のものに書き換える
    • CRM_AUTH_DOMAIN
    • CRM_USER_NAME
    • CRM_USER_PASSWORD
    • CRM_USER_SECURITY_TOKEN
  • 以下のコマンドを実行して単体テストを起動する
pipenv run test:cov

各コマンドの説明

  • pipenv run test
    • pytestを使用してテストを実行する
    • testsフォルダに配置されているテストモジュールを対象に、単体テストを実行する
  • pipenv run test:cov
    • pytestのテスト終了時にカバレッジを収集する
    • 標準出力とカバレッジファイル(.coverage)に出力される
  • pipenv run test:report
    • pytestのテスト終了時にテスト結果をHTMLで出力する
    • .report/test_result.htmlが出力される

単体テストの追加方法

  • testsフォルダ内に、srcフォルダの構成と同じようにフォルダを作り、test_<テスト対象のモジュール名.py>というファイルを作成する
    • 例:src/aws/s3.pyをテストする場合はtests/aws/test_s3.pyというファイル名にする
  • テスト関数はクラスにまとめて、テストスイートとする
  • テスト関数にはドキュメントコメントを付け、テスト観点・準備作業・期待値を記載すること
    • 上記が出力されるスニペットを用意してある。
    • """"""と入力し、「Test docstring (User Snippets)」を選択し、ドキュメントコメントを挿入できる

from src.aws.s3 import S3Resource
class TestS3Resource:
    def test_get_object(self, s3_test, s3_):
        """
        Cases:
            S3からオブジェクトが取得できるか
        Arranges:
            - S3をモック化する
            - 期待値となるファイルを配置する
        Expects:
            オブジェクトが取得でき、期待値と正しいこと
        """
        # more code...