【IaCで作るselenium環境】02_Java実行環境をコンテナで準備する

直近の関連エントリ

――――――――――――――――――――――――――――――――――

こんにちは。SHIFTのスクラムマスター・テスト自動化エンジニアの石丸です。今回は、前回作ったクライアント環境に対して実際にテストを実⾏していきます。



■今回のテーマ

今回のテーマは「Javaの実⾏環境をコンテナで準備する」です。

■前提

前回同様Dockerが必要になります。
Docker Desktopをインストールしておいてください。
https://www.docker.com/products/docker-desktop
また当エントリは、windows環境をベースに記載しています。
何卒ご了承ください。

■前回のおさらい

前回の最後はこんな感じでした。

Selenoidの構成 (1)

■開発環境の準備は⼿間

さて、前回クライアントマシン環境は⽤意できました。
次はそのクライアントマシンに対してテストを実⾏するテストコードを準備して、実際の動きをみていきます。

が、皆さんの中には当然こう思う⽅もいらっしゃるかなと思います。
「コーディングなんてやったことないし、開発環境を整えるなんて難しくてできないよ。」

ご指摘のとおり普通であれば⾃分のマシンに⾊々インストールしないとならないのですが、これからご説明する⽅法はインストール⼀切不要の⽅法です。
というわけで今回は誰でもテスト打鍵できる環境を整える⽅法についてご説明します。

■環境の準備

準備に4つ⼿順があります。

手順1:ソースコードの準備
ご⾃⾝で準備する必要はありません。
実はaerokubeのGitHub上にテストコードが上がっており、こちらをほぼ丸ごと使⽤します。
https://github.com/aerokube/demo-tests

画像1

上記の通りZIPで展開されているのでダウンロードしてきましょう。
もちろんgit cloneで取得しても問題ありません。

ダウンロード先は⼀旦
C:\tmp\docker\mvn
としておきます。

手順2:不要ファイルの削除
ダウンロードしてきたら、以下のファイルは⼀旦削除か拡張⼦リネームをしてください。
 ・AndroidDemoTest.java
 ・AndroidRemoteApkTest.java

手順3:テストコードの修正
サクラエディタ等で構いませんので以下のファイルを開いてください。
 ・DemoTest.java
開くと、20⾏⽬辺りに以下の記述があると思います。

@Before
public void openDriver() throws Exception {
final DesiredCapabilities browser = DesiredCapabilities.chrome();
// browser.setCapability("enableVideo", true);
// browser.setCapability("enableLog", true);
// browser.setCapability("enableVNC", true);
driver = new RemoteWebDriver(new URL(
"http://selenoid.example.com:4444/wd/hub" //Replace with correct host and port
),

これを以下のように変更してください。
※コメントをいれるとmavenさんのビルド時に何故か怒られるのでコメントは除去しましょう。

@Before
public void openDriver() throws Exception {
final DesiredCapabilities browser = DesiredCapabilities.chrome();
browser.setCapability("enableVideo", true);
browser.setCapability("enableLog", true);
browser.setCapability("enableVNC", true);
browser.setCapability("browser", "chrome");
browser.setCapability("version", "83.0");
driver = new RemoteWebDriver(new URL(
"http://172.17.0.1:8083/wd/hub"
), browser);

手順4:イメージの取得
今回はGitHubから取得したソースがmavenプロジェクトなので、mavenイメージを使⽤します。
windowsの場合はPowerShellから、macの場合はterminalから以下のコマンドを叩きましょう。

> docker image pull maven:3.6.3-openjdk-14

実行すると以下のように出力されます。

3.6.3-openjdk-14: Pulling from library/maven
fa926a7d213a: Pull complete
22aed8993d2f: Pull complete
1cba22676e6a: Pull complete
4d01b2ec8506: Pull complete
ed349a7d84c4: Pull complete
b2e166dcf44c: Pull complete
Digest: sha256:ec658b24719573c55c8fabdb77cd513fd783c4869e776432476ecedf05c34379
Status: Downloaded newer image for maven:3.6.3-openjdk-14
docker.io/library/maven:3.6.3-openjdk-14

これで準備は完了です。

テストの実行

以下のコマンドを叩けばOKです。

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

以下のように出⼒されれば成功です。

(略)
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo-test ---
[INFO] Skipping execution of surefire because it has already been run for this configuration
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:18 min
[INFO] Finished at: 2020-07-16T05:22:48Z
[INFO] ------------------------------------------------------------------------

この時、ブラウザでSelenoid-UIを同時に開いておいてください。
正常に起動するとSelenoid-UI上で起動が確認できます。

画像2

今回は拾ったテストケースが短いため、画⾯表⽰の確認は⼀瞬なのでキャプチャ無しです。
代わりにSelenoidが動画を取っていくれているのでこちらを⾒ます。

画像3

確認できましたね。
ちなみに⼀度コンテナをつくったら再実⾏はもっと簡単です。

> docker start -i demo-test

これだけで2度⽬以降同じテストが⾛ります。
テストコードを変えて再実⾏する場合など、これを多⽤します。

今回の構成_02

■コンテナ化のメリット・デメリット

さて、この環境にはいい⾯と悪い⾯があります。
これらを押さえて使いましょう。

メリット
1. とにかく⾯倒な環境構築を⼀切スキップしてプログラムを実⾏できる
なので⽐較的どなたでもすぐ環境⽤意できます。

2. バージョンの管理・変更が容易
Javaに限らず、⾔語やツールのバージョン管理が楽。
切り替えも楽。

3. 複数起動が楽
コンテナ名(今回の例では「demo-test」)を変えてrunすれば、何重にも起動できます。
簡単に負荷をかけるようなテストが組みやすいです。

デメリット
ひとつ⼤きな⽋点があるとすれば、デバッグがしづらいことです。
(⼀応コンテナに対してデバッグポイントで⽌める⽅法もあるにはある)
なのでちゃんと開発するなら、やはり今まで通りの開発環境を構築することをお勧めします。

■まとめ

実際の構築⼿順
1. テストコードはaerokube公式から出てるものを拾ってくる
2. コード内のcapabilitiesを設定し、ローカルに構築したSelenoidのURLに変更する
3. mavenビルド環境(+Java)イメージをpullする
4. 指定のコマンドでコンテナを起動、テストを実⾏する
5. Selenoid-UIで動作確認する

次回はaerokubeの別プロダクト、Ggrについてお話します。
ではでは。

――――――――――――――――――――――――――――――――――

執筆者プロフィール:石丸圭
スクラムを中心にテストのアジリティーを高めるべく
日々仕事のリードタイム・プロセスタイムの圧縮に奮闘中。
6歳4歳0歳児のパパ。
MUPうさぎクラス。

個人的なご相談はインスタDMにてどうぞー。
Instagram:@theboyalex

【ご案内】
テスト自動化のご相談は以下までお気軽にご連絡ください。
https://forms.office.com/Pages/ResponsePage.aspx?id=IkyjGtUOzUeqMMEbzjGdlSf__O4V1URMn-5BpGP8xd9UNE9ESkRPUEs1Wk9FM0REU1BXODFBSkI0MC4u

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら 
https://recruit.shiftinc.jp/career/