初めに
この記事では、テスト自動化ツールの一つとして知られるSeleniumを使ってC#で作成したWebアプリケーションのテストを自動化する手法をご紹介します。少しでも参考になれば幸いです。
背景
システム開発においてテストの工程は非常に重要な工程ですが、開発した製品が想定通りに動作するかをチェックする工数は多く、
また、手作業によるチェックになるため、操作ミス等での作業のやり直しも少なくありません。
弊社製品もリビジョンアップごとに、都度決められたチェック項目のテストを実施することで品質を担保していますが、その部分で多くの工数を費やしているのが現状です。
上記の課題について手作業の部分をツールにより自動化することでテスト工程の負担軽減と品質向上との両立を実現するため自動化を試みました。
Seleniumとは
Selenium は、 Webアプリケーションのテストを自動化するオープンソースソフトウェアです。
2004 年に ThoughtWorks 社によって Web アプリケーションの UI テストを自動化する目的で開発されました。
C#、Groovy、Java、Perl、PHP、Python、Ruby、Scala 等の複数言語に対応しています。
テスト環境について
テストするにあたりSeleniumを使用して自動テスト実行用のプログラムを作成する必要があります。
自動テスト実行用のプログラムはVisual Studio 2022にてC#言語を使用して開発を行っていきたいと思います。
また、自動テスト実行用のプログラムを定期的に実行する必要があるため、CIツールとして「Jenkins」を使用します。
テスト対象のWEBサイトについて
テスト対象のサンプルページとして以下のようなログイン画面を用意しました。
ログイン時に認証不可なパスワードを入力してログインボタンをクリックすると「アカウント情報が不正です。」とアラートメッセージが出力されます。
自動テスト実行用のプログラム作成手順
プロジェクトの作成
Visual Studio 2022でプロジェクトを作成します。
Visual Studioを起動して「ファイル>新規作成>プロジェクト」と選択して、単体テストプロジェクトを作成します。
Seleniumのインストール
Seleniumの必要なパッケージは NuGet 経由でインストールします。
Selenium.WebDriver と Selenium.Chrome.WebDriver をインストールします。
NUnitのインストール
テスト実施するにあたりSeleniumでWEBアプリの自動操作が可能になりますが、テスト結果を出力する必要がありテスト支援ツールであるNUnitもインストールします。
必要なパッケージはNUnit、NUnit.Console、NUnit3TestAdapterになります。
テスト実行用のプログラム作成
プロジェクト内にテストロジックをコーディングしていきます。
画面操作を自動で行うLoginクラスとテスト実行を行うUnitTestクラスを作成します。
今回は、ID不正の場合のアラートメッセージのテストとパスワード不正の場合のアラートメッセージの
表示テストを実施します。
Jenkisの設定
JenkinsをWebサイトからダウンロードしてテスト環境にインストールします。
→Jenkinsのページ
※インストール後に設定やプロジェクトの作成等行いますが、今回は説明を割愛させていただきます。
プロジェクトのジョブのフローとしては、以下4つのステップが必要になります。
1)ソースコード管理ツールからテスト実行用コードをダウンロードする。
2)テスト実行用コードをコンパイルする。
3)nunit3-consoleコマンドにてテスト実行用コードのテストを実行する。
4)3)で出力されたテストレポートを読み込む。
テスト実行
Jenkinsのプロジェクトを実行します。結果として以下のような画面が表示されます。
まとめ
このようにSeleniumでテストを自動化することで冗長的なテスト実施の手間を軽減することができます。
また、Jenkinsを使うことによりブラウザ上でテスト結果を確認することができるため、エンジニアではない方でも結果を確認しやすくなり、同時にエビデンス取得も自動化することで結果報告資料等も効率的に作成できるようになります。
課題としては複雑なテストケースを実施する場合はテストコードのプログラミングに手間がかかることが挙げられます。
また、仕様変更が頻発するプロジェクトや工程ではテストコードのメンテナンスが多発することでプログラマー側に負荷が大きくかかることが挙げられます。
プログラマーとテスターにかかる負荷のバランスを考える必要はありますが大きな仕様変更が少ない保守開発の工程ではプログラマー側のテスト負荷は軽減されるため課題による懸念点は少なくなると思います。
WEBアプリケーションの開発を行っているみなさまのプロジェクトでも、SeleniumやJenkinsを効果的に活用してみてはいかがでしょうか?