2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Selenium IDEで作ったテストコードをDocker化したSeleniumでE2Eテスト

Last updated at Posted at 2021-08-27

概要

Docker環境を作ることで大体どの環境でもDocker化したシステムが動作できるのはとても魅力的だと思います。

QAエンジニアをやっているとテスターさんにSelenium IDEを導入してもらって、テスト要件やテストケースをもとにテスト操作することで自動的にでテストコードができるので便利です。
このときできたテストコードは、調整が必要なのでそのままE2Eテストとして扱うのは難しいですが、全部使えないとしても一部のテスト(認証関連や全ページ遷移の確認など)はそのまま運用できるぐらい効率の良いやり方だと思います。
ですが、できたテストコードをテスターさんがSelenium IEDを起動してテストの実行を手動作業することになるのでちょっと非効率になります。

   スクリーンショット 2021-08-27 12.20.10.png

そこで今回は、上記のイメージズのようにSeleniumを実行できる環境をDockerで作って、定期実行させることでE2Eテスト環境がコスパ良くできると考え、その方法をまとめます。

また、Dockerじゃなくても他のやり方として、JenkinsにSeleniumを実行するような環境をあるのであればそっちを活用してもいいと思います。

ゴール

今回は、タイトルの通り「Selenium IDEで作ったテストコードをDocker化したSeleniumでE2Eテスト」できる環境を作れるところまでとなります。

環境

次の環境がセットアップできたらどのPCでも大丈夫です。
あとは、お好みでエディタが入っていると作業しやすいです。

  • Docker
  • Docker Compose
  • Selenium IDE

Selenium IDE

先にテストコードを作っておきましょう。
セットアップや途中でDockerが動かない状況が起きたとしても、最悪Selenium IDEでE2Eテストできるので。

例として今回は、Googleにアクセスして「qiita」を検索して、トップにヒットしてqiita.comにアクセスしてマイページまで正常にアクセスできるのか確認するテストを作ってみました。
Selenium IDEの入門的な話は割愛するので、他の記事を参考にしてください。

まずは、Selenium IDEのプロジェクトを作っていきます。
スクリーンショット 2021-08-27 12.40.47.png スクリーンショット 2021-08-27 12.42.20.png スクリーンショット 2021-08-27 12.43.40.png

作成すると早速レコーディングが始まるのでテストしたい操作を登録していきます。
スクリーンショット 2021-08-27 12.44.35.png スクリーンショット 2021-08-27 12.45.46.png スクリーンショット 2021-08-27 12.46.33.png

登録が終わったらSelenium IDEのアイコンからエディタを開いて、登録したテストを保存します。
スクリーンショット 2021-08-27 12.47.25.png スクリーンショット 2021-08-27 12.48.09.png

保存したテストを右クリックからテストコードをダウンロードして、最後にプロジェクトを保存(Ctr+s)すればSelenium IDEの作業は一旦終わりです。
スクリーンショット 2021-08-27 12.49.14.png スクリーンショット 2021-08-27 12.49.22.png スクリーンショット 2021-08-27 12.50.01.png

Docker

次にSeleniumのDocker環境を作っていきます。
Dockerに関しても入門的な話は割愛するので、他の記事を参考にしてください。

/srcに先ほどダウンロードしたテストコード(test_202108qiitauserpagecheck.py)を配置します。

Dockerfile
# https://q-three.com/archives/1031
# ベースイメージはpython:3.7
FROM python:3.7
USER root

# 環境変数設定
ENV PYTHONIOENCODING utf-8
ENV TZ='Asia/Tokyo'

# workdirの設定
WORKDIR /opt/

# 作業ディレクトリ作成
RUN mkdir /opt/src
RUN mkdir /opt/data

# apt-getのアップデートなど
RUN apt-get -y update
RUN apt-get -y clean
RUN apt-get -y autoremove
RUN apt-get -y upgrade
RUN apt-get install -y apt-utils unzip
RUN pip install --upgrade pip

# Japanese Localization
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# google-chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
      echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list && \
      apt-get update && \
      apt-get install -y google-chrome-stable

# ChromeDriver
ADD https://chromedriver.storage.googleapis.com/92.0.4515.107/chromedriver_linux64.zip /opt/chrome/
RUN cd /opt/chrome/ && \
      unzip chromedriver_linux64.zip

# python package
RUN pip install selenium && \
      pip install bs4 && \
      pip install oauth2client

ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/chrome

# コンテナ起動時に実行するコマンドを設定
CMD [ "python", "/opt/src/test_202108qiitauserpagecheck.py" ]
docker-compose.yml
version: '3'
services:
  selenium:
    container_name: "selenium"
    build: ./
    volumes:
      - ./src:/opt/src
      - ./data:/opt/data
    ports:
      - "5001:5001"

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version $VERSION_CODE

【Python/Selenium】ChromeDriverバージョンエラー対処法

でまとめられているようにDocker環境を作っている最中にこのエラーに遭遇しました。
原因は、ChromeDriverをインストールする際に指定しているリンクがバージョンコードも指定していて、このバージョンをWebDriverがサポートできていないことらしいです。

にてダウンロードできるWebDriverのバージョンを確認できますが、このエラーに後に

Current browser version is xxx.xxx.xxx.xxx

のように対応できるバージョンが指定するかのように表示されて、このバージョンがchromedriver.storage.googleapis.comになかったりします。
そのときは、一つ古いバージョンをダウンロードすることでエラーが解消できました。

参考記事

まとめ

これで、Selenium IDEで作ったテストコードをDocker化したSeleniumでE2Eテストできる環境ができました。
ですが、これで終わりではなく、

  • テストした結果をどのように可視化しないとE2Eテストの運用はできない
  • テストコードを手動配置ではなく自動的に共有することで全自動化したいい

などの課題があるので、試行錯誤中なので完成したら改めてこの記事を更新しようと思います。
DockerよりもJenkinsにSeleniumを実行するような環境があれば、正直そっちの方がいいと思いますw

 

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?