VisualStudioでDockerサポート付きのアプリを作ってCI/CD構築する その2

 引き続きVisualStudioで作るアプリのCI/CD構築までを進めていく。今回はまずアプリにほぼ不可欠なDBを用意。

 DBもコンテナで用意することにする。まずDBコンテナの追加。あと、Dockerでlinksオプションを使うのは古くてそのうちサポートを外されるとのことで、linksオプションを外す。
https://github.com/hMatoba/DockerAppWithCI/commit/eca41c595c8a29425bf6bd273ab3322eba783a00
コンテナ間の接続はそれぞれの名前で解決される。必要のある接続で具体例を書くと、アプリコンテナからDBコンテナへはmongo、リバースプロキシコンテナからアプリコンテナへはwebappというホスト名を使えば接続できる。

 アプリ側でMongoDBwo使う準備。MongoDBのドライバを入れる。パッケージマネージャコンソールで下記三行。
Install-Package MongoDB.Driver

Install-Package MongoDB.Driver.Core
Install-Package MongoDB.Bson

 続いてすっごく適当なMongoDBの操作コードを入れる。今回は接続できてればいいので、手っ取り早くコントローラに直書きしてしまうが通常はそんなことはやらない。DBに接続できれば使えるということだからこの先は目的に応じて書き換える。

 ここで一度、VisualStudioでデバッグを開始してみて、https://localhostにアクセスしてエラーが出ないのを確認しておく。

 続いてSeleniumでのテストを用意する。Seleniumを使えばシナリオテストの自動化ができてテストしやすくなる。コードは↓を参考にだが、やることを書き下していく。
https://github.com/hMatoba/DockerAppWithCI/commit/ad8aed9510f2b1a928c234658a2af1b73473e105

 まずdocker-compose.override.ymlに、Seleniumコンテナの用意を書く。なぜSeleniumをコンテナで用意するかというと、それが楽だから、マジで楽。

 続いてソリューションにPythonプロジェクトを追加する。もちろんこれはSeleniumを動かすために使う。以前にC#でSeleniumを動かしたら、型がめんどうに感じたのでPythonを使っている。
 ソリューションに空のPythonプロジェクトを追加し、Pythonスクリプトのファイル名をsetup.pyに変更する。内容は↑のコミットにあるが、ちょっと修正がある。s_test.suiteとなっているところは誤りなのでselenium_test.suiteに変更する。
 あとは↑に出てきているコミットの通りにファイルを用意していく。tests/selenium_test.pyはseleniumを動かしてのテストをしている。まずこのPythonコードからseleniumへの接続について。Pythonコードはホスト環境で走りはじめ、seleniumはコンテナで用意されている。seleniumはホストにポートバインドされるように、composeファイルで設定してある。だからそのポートである4444でつなぐことができる。ホストのPythonコード→コンテナのseleniumは"127.0.0.1:4444"でつなげる。次にseleniumコンテナ→リバースプロキシへの接続だが、これまたcomposeファイルで、リバースプロキシコンテナへコンテナ環境からつなぎたい場合、frontという名前でつなげるように設定してある。で、ポート443をバインドしてあるから"https://front"で、seleniumコンテナからリバースプロキシコンテナへ接続できる。テストはページタイトルを簡単にチェックして、コンテンツが取得できているのを確認する程度で。
 あとはテストのためにPython環境に必要なライブラリを入れる。requirements.txtを書いて、"selenium"と"pymongo"をインストールする。pymongoは今回は実質使っていないが、これを使ってMongoDBに初期データを入れてテストをするものありだろう。
 seleniumを使ったPythonでのテストコードを用意したら、一度VisualStudioを落として立ち上げ直す。ちょっと待つと左のテストエクスプローラに、用意したテストが自動で読み込まれる。
 あとはデバッグを開始してアプリを起動状態にし、テストエクスプローラで該当のテストを選択して実行してみる。全部実行しようとするとソリューションのビルドが走ってアプリが止まり、テストが失敗する。だから選択して実行テストを選ぶ。うまくいけばグリーンシグナルが得られるし、失敗したらVisualStudio内のコンソールにPythonなりサーバサイドなりのエラーを確認できるだろう。


 いきなりE2Eテストを導入した。単体テストはxUnitを使ったものがあるが、とくに難しいこともないので説明を省く。

 今回は開発環境でのテストを用意できた。次回はTravisCI上で、プロジェクトのビルド、テストなどを行う。
comment: 0