はじめに
Seleniumを使った自動テスト環境の構築方法をご紹介します。
構築する環境は以下になります。
OS:
RockyLinux8
プログラム言語:
Ruby
ブラウザ:
FireFox
1.OSパッケージインストール
Seleniumに必要なOSパッケージをインストールします。
dnf install -y epel-release
dnf config-manager --set-enabled powertools
dnf install -y git
dnf install -y unzip
dnf install -y wget
dnf install -y xorg-x11-server-Xvfb
dnf install -y ImageMagick
dnf install -y vlgothic-fonts
dnf install -y vlgothic-p-fonts
wget https://moji.or.jp/wp-content/ipafont/IPAexfont/ipaexg00401.zip
unzip ipaexg00401.zip
mkdir /usr/share/fonts/ipa
mv ipaexg00401/*.ttf /usr/share/fonts/ipa/
fc-cache -fv
dnf install -y gcc
dnf install -y libxml2
dnf install -y libxml2-devel
dnf install -y libxslt
dnf install -y libxslt-devel
dnf module install -y ruby:2.7
dnf install -y ruby-devel
dnf install -y firefox
dnf install -y freeradius-utils
dnf install -y gcc-c++
dnf install -y sqlite-devel
dnf install -y rpm-build
2.Gemパッケージインストール
Rubyで使用するGemパッケージをインストールします。
gem install rspec
gem install awesome_print
gem install base32
gem install libxml-ruby
gem install net-ldap
gem install rotp
gem install selenium-webdriver
gem install rest-client
gem install nokogiri
gem install sqlite3
3.ブラウザのドライバーインストール
Seleniumが使用するブラウザのWebDriverをインストールします。
wget https://github.com/mozilla/geckodriver/releases/download/v0.29.1/geckodriver-v0.29.1-linux64.tar.gz
tar xvzf geckodriver-v0.29.1-linux64.tar.gz
chmod 555 geckodriver
mv geckodriver /usr/bin
4.ヘッドレスモード設定
物理ディスプレイがなくても仮想ディスプレイでブラウザを表示するためにXvfbの設定をします。
vi /usr/lib/systemd/system/xvfb_99.service
------------------------------------------------------------------------------
[Unit]
Description=Xvfb server daemon.
After=network.target
[Service]
Type=simple
Environment="OPTION=:99 -screen 0 1920x1080x24 -extension RANDR"
ExecStart=/usr/bin/Xvfb $OPTION
[Install]
WantedBy=multi-user.target
------------------------------------------------------------------------------
systemctl daemon-reload
systemctl start xvfb_99
systemctl enable xvfb_99
5.動作確認
インストールまで完了したので動作確認として弊社サービスへのログインをSeleniumで実行します。
ログイン画面表示、ログイン情報入力、ログイン後画面のタイミングでスクリーンショットを取得しています。
実行コマンドとテストプログラムは以下です。
respec test.rb
vi test.rb
=====================================================================
#!/usr/local/bin/rspec
#encoding: utf-8
require "selenium-webdriver"
#ブラウザ初期設定
profile = Selenium::WebDriver::Firefox::Profile.new
profile['intl.accept_languages'] = 'ja'
capabilities = Selenium::WebDriver::Remote::Capabilities.firefox(accept_insecure_certs: true)
options = Selenium::WebDriver::Firefox::Options.new(profile: profile, log_level: :trace)
options.add_argument('--headless')
driver = Selenium::WebDriver.for(:firefox, { options: options, desired_capabilities: capabilities })
wait = Selenium::WebDriver::Wait.new(timeout: 10)
#ログイン画面表示
driver.get("https://slink.secioss.com/user/?tenant=test-yamada")
driver.save_screenshot("login_before.png")
#ログイン情報入力
driver.find_element(:id, 'username_input').send_keys("XXXX")
driver.find_element(:id, 'password_input').send_keys("YYYY")
driver.save_screenshot("input_login_info.png")
#ログインボタンクリック
driver.find_element(:id, 'login_button').click
wait.until { driver.find_element(:class, 'loginBox').displayed? }
driver.save_screenshot("login_after.png")
まとめ
RockyLinux8でのSeleniumインストールから動作確認までをご紹介しました。
弊社では主にリグレッションテストとしてSeleniumでの自動テストを実施しています。
入力項目が多かったり、テスト対象が多い場合などに一度シナリオを作成しておくとテストに掛かる負荷が軽減され、他のテストに注力できます。
具体的なシナリオ作成や安定して動作させるコツなどは別の機会にご紹介したいと思います。
セシオスでは、絶賛メンバーを募集中です。今回のストーリーを読んで、「サービスが気になる」「一緒に活躍してみたい」と感じた方・ご興味がある方がいらっしゃいましたら、下記またはこちらより気軽にエントリーしてください!まずはカジュアル面談にてお会いできるのを楽しみにしています。