Zaleniumさんに動的にコンテナを立ち上げたり捨てたりしてもらいながらSelenium(というかGebだけど)のテストを実行してその録画を見る

English version of this article is here:

dev.to

Zaleniumってことばを見かけたので触ってみた。

Zalenium?

https://zalando.github.io/zalenium/

ちょこっと触ってみた感じ良さげ

  • 1) ローカルマシンですごく簡単に試すことができる
  • 2) Seleniumのテストを実行するのに合わせて動的にコンテナが起動する
  • 3) テストが録画される

1) ローカルマシンですごく簡単に試すことができる

Zaleinumを起動

# イメージを2つpullしてきて
docker pull elgalu/selenium
docker pull dosel/zalenium

# 実行!
docker run --rm -ti --name zalenium -p 4444:4444 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp/videos:/home/seluser/videos \
  --privileged dosel/zalenium start

(今日の話とは直接関係ないけど、docker.sockのマウントは注意して使いたいね)

で、Live Previewページにアクセスすると http://localhost:4444/grid/admin/live 2つのマシンが起動してることが分かる。

Live Preview

テストを実行する

テストを実行するための環境は立ち上がったから、Seleniumのテストを用意して実行してみよう。

僕は自分の好みでGebで用意したけど、お好きなやつでどうぞ。

http://www.gebish.org/

HelloZelenium.groovy

Browser.drive {
  go "http://gebish.org"

  assert title == "Geb - Very Groovy Browser Automation"

  $("div.menu a.manuals").click()
  waitFor { !$("#manuals-menu").hasClass("animating") }

  $("#manuals-menu a")[0].click()

  assert title.startsWith("The Book Of Geb")
}

Gebのドキュメントからとってきた。読んだら何してるかはだいたい分かるよね。

GebConfig.groovy

driver = {
  def capabilities = new DesiredCapabilities();
  capabilities.setCapability(CapabilityType.BROWSER_NAME, BrowserType.CHROME);
  capabilities.setCapability(CapabilityType.PLATFORM_NAME, Platform.LINUX);

  def remoteWebDriverUrl = new URL("http://localhost:4444/wd/hub")
  new RemoteWebDriver(remoteWebDriverUrl, capabilities)
}

設定はGebConfigに。RemoteWebDriverにZelenium Hub URLを渡してテストを実行する。

import とかを含んだソース全部はここに置いといた: https://gist.github.com/bufferings/a8980ea515a893e21a3a95955ace5dc9

で、実行!

groovy HelloZalenium

したら、Live Previewのページで、テストが実行されてるのが見える。

Live Preview

簡単。

2) Seleniumのテストを実行するのに合わせて動的にコンテナが起動する

複数のテストを同時に実行してみる。

for i in {1..8};do groovy HelloZalenium & done

たら、8つのマシンがコンテナとして立ち上がって、テストが実行されて、シャットダウンするのが分かる。

Live Preview3

3) テストが録画される

デフォルトで全部のテストが録画される。ここで見れる http://localhost:4444/dashboard/#

Recorded Video

設定まわり

こんな感じで設定を渡したりできる:

driver = {
  def capabilities = new DesiredCapabilities();
  capabilities.setCapability(CapabilityType.BROWSER_NAME, BrowserType.FIREFOX);
  capabilities.setCapability(CapabilityType.PLATFORM_NAME, Platform.LINUX);
  capabilities.setCapability("screenResolution", "1280x720");
  capabilities.setCapability("tz", "Asia/Tokyo");

  def remoteWebDriverUrl = new URL("http://localhost:4444/wd/hub")
  new RemoteWebDriver(remoteWebDriverUrl, capabilities)
}

FireFoxで、1280x720で、Asiz/Tokyoで実行されるようになった

Live Preview4

他にも面白そうな機能があるなぁ

  • SauceLabs/BrowserStack/TestingBot連携
  • Kubernetes対応
  • とか

まとめ

Zelenium面白そう。また気が向いたときに触ってみようかな。