LoginSignup
52
55

More than 3 years have passed since last update.

dockerでE2Eテスト環境を構築 (python3 + selenium)

Last updated at Posted at 2017-09-03

概要

自動のエンドツーエンドテスト環境を作る必要があり、チーム全体で共通で簡易に設置して使えるようにしたい。
そこで、dockerで構築を検討した結果をメモとして残します。

seleniumについて

下記サイトにてとりあえずの基礎知識を得る

LinuxのOS選定

上記の資料を読んでいろいろとGoogle先生に聞いたところ、chromeやfirefoxをインストールして正常に動く環境がまず必要。

LinuxとしてCentOSに自分でchromeやfirefoxをインストールして環境を作るとなるとそれなりに手間(構築・メンテ)がかかり他の人に引き継いで継続するのは難しい...

そこで、dockerにてコンテナとして扱うことで、簡易に構築できることを目指す。

dockerのseleniumの公式コンテナを使った下記サイトが多機能でいい感じなので、こちらを拝借することにする。

良いと思った点

  • 通常版(node)とデバッグ版(node-debug)が用意されている
  • デバッグ版 -> VNCで画面確認ができる
  • 通常版 -> 実際CircleCIやJenkinsなどで自動実行する際は画面がいらない
  • chromeとfirefoxのnodeが用意されている。
  • selenium-hubとWebDriver(chrome, firefox)が別れており、わかりやすい
  • pythonやruby,phpなどのコンテナを追加することで環境を全てdockerで扱える

ベース環境を用意する (vagrant)

本番などと同じような環境(Linux)にできるだけしたいのでvagrant上に構築
※ dockerで構築するのでLinuxであればUbuntu, debianなどどれでも構いません。

今回は、自分で作ったCentOS7.3のVirtualBoxイメージを使ったVagrantで起動。

Vagrant環境ファイル
https://github.com/reflet/vagrant-centos-7.3

$ git clone https://github.com/reflet/vagrant-centos-7.3.git .
$ vagrant up
$ vagrant ssh

※ 自動で、git, vim, wget, unzip, docker, docker-compose がインストールされます

selenium起動

docker-composeをseleniumHQのコンテナを設置します。

<設置するコンテナ>

  • selenimu-hub (selenium/hub)
  • chrome (selenium/node-chrome-debug)
  • firefox (selenium/node-firefox-debug)

docker-compose.ymlファイルを作成する

ターミナル
[vagrant@centos73 ~]$ cd opt
[vagrant@centos73 opt]$ vi docker-compose.yml

切り替えて使えるようfirefoxも記載しておくが、Macが非力なのでchromeのみ起動する。

github: reflet/server-selenium-python3
https://github.com/reflet/server-selenium-python3

docker-compose.yml
selenium-hub:
  image: selenium/hub
  container_name: 'selenium-hub'
  ports:
    - 4444:4444

chrome:
  image: selenium/node-chrome-debug
  container_name: 'chrome'
  links:
    - selenium-hub:hub
  ports:
    - 5900:5900
  volumes:
    - /dev/shm:/dev/shm

#firefox:
#  image: selenium/node-firefox-debug
#  container_name: 'firefox'
#  ports:
#   - 5910:5900
#  links:
#    - selenium-hub:hub

コンテナを起動する

ターミナル
[vagrant@centos73 opt]$ docker-compose up -d

起動状況を確認する

ターミナル
[vagrant@centos73 opt]$ docker-compose ps
    Name               Command           State           Ports          
-----------------------------------------------------------------------
chrome         /opt/bin/entry_point.sh   Up      0.0.0.0:5900->5900/tcp 
selenium-hub   /opt/bin/entry_point.sh   Up      0.0.0.0:4444->4444/tcp 

※ Stateが UPになっていればOK

VNCの接続テスト

Macの場合は、Finder -> サーバへ接続 -> vnc://192.168.33.10:5900
※ パスワードは「secret」

screen.png

テストを実行する環境を追加 (pythonコンテナ)

今回、python3.6で環境を作ることにします。
※ phpやrubyの場合はそれぞれのコンテナを用意することで差し替え可能

docker-compose.ymlにpythonのコンテナを追加
※ 「tests」フォルダにテストコードを配置

[vagrant@centos73 opt]$ mkdir tests
[vagrant@centos73 opt]$ vi docker-compose.yml
docker-compose.yml

           
           
           

python:
  image: python:3
  container_name: 'python'
  links:
    - selenium-hub:hub
  command: 'tail -f /dev/null'
  working_dir: '/root/'
  volumes:
    - ./tests/:/root/tests/

docker-composeを再起動

ターミナル
[vagrant@centos73 opt]$ docker-compose restart
[vagrant@centos73 opt]$ docker-compose ps
    Name               Command           State           Ports          
-----------------------------------------------------------------------
chrome         /opt/bin/entry_point.sh   Up      0.0.0.0:5900->5900/tcp 
python         tail -f /dev/null         Up                             
selenium-hub   /opt/bin/entry_point.sh   Up      0.0.0.0:4444->4444/tcp 

pythonコンテナにseleniumをインストールする

vagrant(centos7)からpythonコンテナへ移動

[vagrant@centos73 opt]$ docker exec -it python bash

pythonのバージョンを確認する

# python --version
Python 3.6.2

ファイル編集などができるようvimをインストールしておく

# apt-get -y update && apt-get install -y vim

pipを使ってseleniumをインストールする

# pip install selenium
Collecting selenium
  Downloading selenium-3.5.0-py2.py3-none-any.whl (921kB)
    100% |████████████████████████████████| 921kB 1.2MB/s 
Installing collected packages: selenium
Successfully installed selenium-3.5.0

テスト

pythonコンテナからseleniumでchromeを操作してみる。
※ VNCで画面を見ながら下記コマンド操作をすると動きが見れます

ターミナル
# python
Python 3.6.2 (default, Aug 29 2017, 05:52:11) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
>>> driver = webdriver.Remote(
    command_executor='http://selenium-hub:4444/wd/hub',
    desired_capabilities=DesiredCapabilities.CHROME)
>>> driver.get("http://qiita.com/reflet")
>>> driver.close()

※ pythonからの接続先は、別コンテナ(selenium-hub)の4444ポートです。
 (IPアドレスだと変わる可能性があるので、コンテナ名で指定する)

参考サイト (docker)

参考サイト (その他)

52
55
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
55