テスト実行環境をコンテナでさくっと準備する

■はじめに

本日の内容は実行環境をコンテナで準備するよー、というお話です。


■ことの発端

初学者を含めて、Selenoid環境を作成してテスト起動してお試ししてもらおうと思った時に、統合開発環境を準備してテスト用のソースコードを準備して実行する、という手順が初心者には限りなくハードルが高いんだよなーと前から常々思っていました。

何か誰でもできる簡単な方法ないかしらと色々思考を巡らしていたのですが、よくよく考えたら自分がちょいちょいやってる実行環境のコンテナ化が一番楽なんじゃないかな、と思ったので備忘録としてまとめます。

■仕組みの概要

例えばJavaソースコードを実行しようとした場合、実行マシンにはJavaが入っている必要があります。
が、Javaをインストールして環境変数設定してパス通して。。みたいな作業をするのがしんどいですよね。

こんな時、Javaコンパイラをコンテナとして分離してソースコードはDataVolumesとして参照してやれば、ソースコードの修正は今まで通りマシン上で行い、実行はコンテナに委ねるといったことが可能です。

今回はJavanの環境とmavenの実行環境をコンテナで用意してしまいます。
これでマシンにJavaやらMavenやらを入れずに済みます。

■事前準備

①Docker Desktopをインストール

これは説明不要ですね。

②テストコードの準備

実はaerokubeさんにてテストコードを用意してくださっています。

github.com
cloneするかzipでダウンロードしてローカルの所定の場所に配置しましょう。
ローカルに落としてきたら、今回使用するソースコードはDemoTestだけなので、それ以外のテストコード(AndroidRemoteApkTest、AndroidDemoTest)は削除してしまいましょう。

次にDemoTestのRemoteDriverがしているURLをローカルSelenoidに向けます。

driver = new RemoteWebDriver(new URL("http://172.1.0.1:8083/wd/hub"),browser);


③Selenoidの準備

これに関しては以前の記事がありますので、こちらを参考に準備します。


theboyalex.hatenablog.com
theboyalex.hatenablog.com

■実行

2つ手順があります

①イメージの取得

pullしてきたテストコードはmavenプロジェクトです。
なので今回使用するイメージはmaven環境となります。

以下のコマンドでpullしてきましょう。

> docker image pull maven:3.6.3-openjdk-14

これでイメージがローカルに取得できます。

②コンテナの実行

取得してきたイメージからコンテナを実行します。

> docker run -it --net="bridge" --name demo-test -v ${PWD}/demo-tests:/usr/src/mymaven -w /usr/src/mymaven maven mvn clean install test


既にSelenoidがDocker内で実行されている前提なので、network設定をbridgeにします。
またvolumeを先ほど取得したdemo-testsに指定します。
テストを実行するのでテストコマンドを含めることを忘れずに。

これでSelenoid-UIにブラウザが起動されたら成功です。

ちなみに2度3度と実行することになると思いますが、次回からは以下のコマンドで動きます。

> docker start -i demo-test


ではでは。