5.3 KiB
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」キーを押して起動する
- デバッグモードで実行されるため、適当なところにブレークポイントを置いてデバッグすることができる
単体テストについて
前提
- Pytestを使用する
- カバレッジも取得したいため、pytest-covも使う
- レポートを出力するため、pytest-htmlを使う
- S3をモック化したいため、motoをつかう
- CRMはテスト用の環境を使いたいため、newdwh_opeのアドレスでDeveloper組織を登録する
テスト環境構築
- 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...