nekochans / ai-cat-api

ねこの人格を持ったAIとお話できるサービスのバックエンドAPI
6 stars 0 forks source link

テストコードはDockerで作成したMySQLコンテナを参照するように改修 #79

Closed keitakn closed 11 months ago

keitakn commented 11 months ago

issueURL

https://github.com/nekochans/ai-cat-api/issues/73

この PR で対応する範囲 / この PR で対応しない範囲

https://github.com/nekochans/ai-cat-api/issues/73 の完了の定義を満たす為にコンテナでMySQLを起動するように変更。

テストコードに関してはMySQLのコンテナを参照するようにする。

Storybook の URL、 スクリーンショット

なし

変更点概要

コンテナでMySQLを起動するように変更しました。

またDBを利用したテストコードの速度低下を避ける為に pytest-xdist を使ってテストを並列実行するようにしました。

しかしこのままだとテスト同士のDBの初期化処理などが衝突してしまいテストが失敗してしまいます。

その為、以下のようなアプローチを採用しました。

  1. PlanetScaleの https://api-docs.planetscale.com/reference/get-a-branch-schema のAPIから対象ブランチのSchemaを取得
  2. テストケース毎にユニークなデータベース名を作成して上記で取得したDBSchemaを元にテスト用のテーブルを作成する
  3. テスト実行時はテストケース毎に上記で作成したデータベースを見る事でデータ初期化の競合を回避する

これによってデータベースを使ったテストの並列実行を可能にしています。

レビュアーに重点的にチェックして欲しい点

特になし

補足情報

テストを並列実行すると print が出力出来なくなる。

これは pytest-xdist によって -s/--capture=no が無効化されてしまうから。

以下のように sys.stderr に出力するようにすれば表示させる事が可能。

import sys

print("AAAAAAAAAAAA", file=sys.stderr)