本投稿はAzure DevOps Advent Calendar 2019の21日目の投稿になります。
DevOpsを推進するうえで重要な要素となる自動化ですが、様々な方法が考えられますし、組織に応じて導入を進めていく必要があります。組織のカルチャーを無視してコンセンサスが得られない状況で独自のツールが乱立してそれが運用に与える効果を測ることができればいいなと考えているsasukehです。皆様いかがお過ごしでしょうか?
巷では、seleniumを使って自動化という記事がかなりの数上がってくるようになりました。その効果もあり、WebのE2Eテストをseleniumで自動化するというかたも増えてきているように思えます。Test Driven Developmentもめちゃくちゃ重要でソフトウェアを検証、計測することで、その開発が正しい方向を向いているかの指標となります。なので、TDD始めましょう!というのは簡単だけど、じゃあどうすればいいの?という目的はわかったけど、手段がわからないという状況にいる方もいるのでは?と思います。とくにAzure DevOpsを使ってSeleniumでUIのテスト自動化したいけど、やっぱりagentにGUIが必要で、CLIは向いてないよね?みたいな解釈をしているかたがいらっしゃいますが、実は、seleniumには、headless実行と呼ばれる、GUIなしで実行する方法があります。また、Screenshotも取れるので、ZipでまとめてBlobでアップロードする方法もあります。
今年の初め頃に社内のチームメンバーとハッカソンしたときのコードなりtipsがあったのですが、なかなか公開できていなかったので、今日これをまとめようと思います。
はじめる前に
pythonでseleniumを動かすTipsについては、Qiitaの記事をいくつか参考にすれば実行できると思いますので、今回は、Azure DevOps Agent(Microsoftが提供するHosted Agent)に対してSeleniumを実行する環境を整えるという内容にします。
また、Windows/Linux Agentでの例については、はまりどころが少ないと思うので、Mac Agentを使った例を紹介したいと思います。
pipelineでのタスクについて
Agentに対していくつかのパッケージをインストールする場合には、Bashのスクリプトを経由し、brewでパッケージをインストールすることができます。また、caskを使うことでchrome driverなどをインストールすることができます。
実際のタスクは、下記の図のように、Agent jobにbash scriptを追加します。
Bash Scriptは、Fileを指定する方法とインラインでスクリプトを用意する方法があります。
Azure DevOpsをブラウザーから使うユーザーは、ブラウザから編集することができ、ソースコード管理をしている場合、リポジトリから、このスクリプトを参照させることができます。
実際のスクリプトについて
echo "=============== Install apps ===============" # 手順1
brew update
brew tap caskroom/cask
brew cask upgrade
brew cask install chromedriver
brew cask install xquartz
brew cask install google-chrome
brew cask upgrade
brew cask list
echo "=============== load X process ===============" # 手順2
sudo launchctl load -w /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
echo "=============== install python dependency ===============" # 手順3
pip3 install -r $(System.DefaultWorkingDirectory)/_work/s/requirements.txt