インフラ担当の柴田です。 今日は品質管理部(以下QA)さんと協力して、テストを自動化した話を紹介します。
2時間かかるテスト
今回紹介するテストの元になった案件ですが、案件の都合で開発の途中から、QAさんによるテストを行うという案件でした。
開発の途中にも色々あると思いますがまだ機能も安定していないような状況でQAさんにまわしており、QAさんがテストする環境(以下QA環境)にデプロイした結果それまでできていた操作ができなくなったり、テストしたい状態にできなかったりという状態になることもありました。
そこでデプロイチェック環境を用意してQA環境へデプロイする前に、デプロイチェック環境で最低限のテスト(デプロイチェック)を実施してからQA環境にデプロイするという運用になったのですが、デプロイチェックの作業に2時間かかるというボリュームでした。
結果としてQA側のテストは止まらずに実施できるようにはなったのですが、新しい機能をテストにまわすのに時間が掛かるようになりました。
QAさんによるテストの自動化
ある日QAの藤田さんがPython × Selenium × Chromeでテストを自動化してみたと連絡があり、 なんと2時間かかっていたデプロイチェックが10分でできるようになりました。
さらに、実装について確認してみるとQAさんらしい工夫がされていました。
QAさんらしい自動化
Seleniumを使ってブラウザの操作をするというのは、良く聞く話で検索すれば多くのサンプルが見つかりますが、大抵は次のように直接Pythonのコードとしてブラウザの操作を記述しています。
from selenium import webdriver driver = webdriver.Firefox() # Navigate to Url driver.get("https://www.example.com") # Get all the elements available with tag name 'p' elements = driver.find_elements_by_tag_name('p') for e in elements: print e.text
(https://selenium.dev/documentation/en/webdriver/web_element/ より)
一方で藤田さんが作られたプログラムはテストケースをExcelで入力し、結果もExcel+各テストケース実行時のスクリーンショットで出力するというものでした。
Excelでテストケースを書くようにすることでPythonが分からなくてもテストケースを書くことができるし、テスト仕様書のようなドキュメントにも転用しやすいなど、QAさんらしい工夫だと思いました。
CI/CDをまわす
今回の案件ではJenkinsによるCI/CDが用意されていましたので、そこに藤田さんのデプロイチェックプログラムも乗っけることにしました。
Chrome等必要なプログラムがいくつかあるのでプログラムが動く環境をDockerで作ってJenkinsからそのコンテナを実行するという方針にし、いくつかCI/CDで使いやすいようにデプロイチェックプログラム側を修正して貰うことで、Jenkinsでの運用が始まりました。
一度Jenkinsで実行できるようになれば後は早いもので、デプロイチェック環境にデプロイしたら自動でデプロイテストを実行するように設定して実行結果をチャットに届くようにする等の微調整をして、デプロイJOBを実行したら後はチャットで結果が届くのを待つだけになりました。
まとめ
2時間かかっていたデプロイテストが10分程度になった上に、デプロイすれば後はチャットが届くのを待つだけになり、 QA環境へのデプロイも頻繁にできるようになりました。 結果、最初は週に数回だったQA環境へのデプロイが後半は日に2回はできるようになりました。
また、藤田さんのテストケースやテスト結果をExcelで管理するというアイデアは素晴らしく、今後も機能を改善していって頂きたいなと思います。