1
/
5

森田ドラゴンのインターンシップ ~34日目~ pytest書き直し

こんにちは、高知からリモートインターンしている森田ドラゴンです。前回、お天気APIを作成し、webサイトと連携させることができました。ただ、まだドキュメントを書き直したり、といった作業が必要になってきます。残っている作業は

・エンドポイントをjsに渡す方法を考える
・テスト項目を書き直す
・レスポンス(例外処理)を書く
・設計を書き直す

の4つになります。今日作業したのは上の2つです。

エンドポイントをJSに渡す

今の段階では、SAMで作成したApi Gatewayのエンドポイントを、コンソールから確認した後、JSに書き込んでいます。二度手間で面倒だなと思ったので、デプロイ時に渡す方法を色々考えていました。思いついたのは以下の二つで、

  1. Outputsに出力して、参照する
  2. S3等の外部ファイルにエンドポイントを出力する

1の方法を試していたんですが、Serverless::Apiを定義していなかったせいでエラーが発生し、詰まっていました。DefinitionBodyを適当に定義すればできそうな気もしますが、OpenAPI周りについての理解が浅いので、手をつけたくないなーと思い、理解できるやり方を調べていました。

調べていく中で、Outputsパラメータはテンプレートが互いにやり取りするためのインターフェースのようなものだと気づきました。テンプレート同士が参照しあえるなら、他のファイルやコマンドを使ってよみだせそうですが、そういった説明の記事には出会えませんでした。今思いついたんですが、aws cliから読み出せそうな気がするので、シェルで組み込んであげればいい感じにできそうな気がします。

テストを書き直す

テストを書くことは慣れていなくて、いまだに混乱します。テストを切り分けると、

・pythonコードのテスト
・AWSリソースのテスト

と2つにわけることができます。コードを見直すと、Api Gatewayから返すべきエラー( 404 無効なアクセス等)と、Lambdaから返すべきエラー( 出力に失敗した等 )の住み分けができていないので、ここも修正する必要がありそうです。HTTPステータスコードの意味を確認しながら進めていますが、Api Gatewayの理解が甘いので、設定方法をまた調べる必要がありそうです。

PythonのテストはPytestを使って関数の動作をテストしていきます。予期したデータを返してくれるかどうかでテストしていますが、正解となるデータをどうやって用意すればいいのか?正解となるデータが正しいと判断するにはどうすればいいのか?と堂々巡りなことを考えてしまいます。

ある程度は、こちらが適当に決めてしまってもいいのだとは思います。@pytest.fixture() という、「テストに使うデータをテストする」という関数を見つけたので、この機能を掘り下げます。ドキュメントを読んでいても、@pytest.fixture() 使い方がいまいちつかめていないので、チュートリアルを別のファイルでやろうと思います。

株式会社サーバーワークスでは一緒に働く仲間を募集しています
同じタグの記事
今週のランキング
株式会社サーバーワークスからお誘い
この話題に共感したら、メンバーと話してみませんか?