ローコードテスト自動化ツール T-DASH

【2024年最新版】テスト自動化のフレームワークを一挙にご紹介

ウェブサイトの品質を高めるためには、十分なテストが必要です。しかしながら開発プロジェクトの全工程におけるテスト工数の割合は高い(当社ではIPAが提供しているデータより、その割合を37%※と推測しています)一方、万が一開発工程が遅れたら、そのテストの時間が足りなくなってしまいます。そのため、読者の方々におかれましても、品質をある程度で妥協して納期優先で進める記憶はございませんか?この事象を避けるため、今回はテスト工程を短縮できるテスト自動化フレームワークをご紹介させていただきます。

※独立行政法人情報処理機構(IPA)「ソフトウェア開発分析データ集2020 」*1より

テスト自動化の定義とメリットは?

ISTQB(国際ソフトウェアテスト資格認定委員会)の用語集によると、テスト自動化(test automation)は「ソフトウェアを使って、テストを実行、またはサポートすること」*2と定義されています。そのテスト自動化は下記のメリットがあります。

【テスト自動化のメリット】

短時間で多くのテストを実行することができる

事前に環境構築できれば、複数のテストを同時に走らせることも可能です。もちろん、複数のテスト環境でテストを行うことも可能です。

ヒューマンエラー防止

手作業ではないため、属人化もせず、個々人の主観も入ることなくテストを実行できます。

時間に拘らずに実行が可能

時間を問わず、例えば終業後や営業時間外などでテストを実行することが可能になるため、開発工程とのバッティングをある程度避けられて、生産性を高めることができます。

テスト結果のレポートが自動的に作成される

テスト自動化のツールやフレームワークにはおおよそレポート作成機能があります。テスト完了と同時にレポートの確認ができます。

テスト自動化フレームワークとは?何のために使うの?

テスト自動化のフレームワークとはどういったものでしょうか?そもそもフレームワークの役割は「ルールのセット」です。例えば、フレームワークは命名規則、ファイル階層、プロセス、モジュール性などを決めたら、誰が開発しても必ずこのフレームワークのルールを沿って開発を行うことになります。こうすることで、保守性を高くすることが可能になります。

ではテスト自動化フレームワークは何ですか?ですが、「テスト自動化の実装を楽にするための土台となる仕組み」が答えになります。よって開発者の目線から見ると、テスト自動化の実装工程の工数が節約できる点が大きなメリットとなります。

おすすめフレームワークをご紹介

ここからは、おすすめのフレームワークを3つご紹介します。

1. Selenium

Seleniumはブラウザのテスト自動化をするためのオープンソースフレームワークです。具体的には、人の操作を真似して、テストを行います。人によるミスがなくなり、結果コストの削減にもつながります。整合テストの段階で、特にホワイトボックステストでテストのカバレッジ(網羅率)を上がって、ウェブサイトの品質向上につながります。

元のSelenium はテスト自動化のフレームワークですが、今は3つのプロジェクトがあり、各自の対応シーンがあります。これから紹介いたします。

・ Seleniumのプロジェクト

図1:Seleniumのプロジェクト(出典:https://www.selenium.dev/)*3

a. Selenium Webdriver

・紹介: SeleniumはSelenium Webdriverを指すことが多いです。Seleniumでテストする Selenium Webdriverを使用して、テストケースをコーディングして、その成果を実行します。よってSelenium Webdriver自体でテストができるではなく、Selenium Webdriverでテストツールを開発するイメージです。

・できること:サポートされた開発言語を使って、自分のテスト自動化ツールを開発します。

b. Selenium IDE

・紹介:Selenium Webdriverと違って、Selenium IDEはそのまま使えるツールです。

・できること

1. レコーディングでテストケースを作る

 操作をレコーディングして、テストケースを作成できます。例えコーディングができない方でもテストケースを作れます

2. テストケースの再利用

図3  Robot Frameworkのシステムアーキテクチャ (出典:https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#high-level-architecture )

図2のように、レコーディングで、もしくはキーワードを使って、重複利用できるテストケースが作られます。Selenium IDEはフレームワークよりアプリというべきでしょう。

・使用方法:実行ファイル、ChromeとFirefoxのプラグインが提供されています。

c. Selenium Grid

 ・紹介:複数のマシンでテストを実行して、中央から管理できます。

 ・できること:

  1. 複数の機器を使って、テストを並行で実行する
  2. 同じテストケースを複数の環境で実行する
  3. テストの環境が制御できる

・サポート環境

  1. プラットフォーム
    1. Windows
    2. macOS
    3. Linux
  2. テストできる環境
    1. Microsoft Edge
    2. Chrome
    3. Firefox
    4. Opera
    5. Safari
    6. Internet Explorer 11
    7. Microsoft EdgeのIE Mode
  3. 開発言語
    1. Java
    2. Python
    3. C#
    4. Ruby
    5. JavaScript
    6. Kotlin

※執筆時点で既にIE11の公式サポートが終了しました。*4

2. Robot Framework

Robot Frameworkはpythonで開発されたテスト自動化フレームワークです。使用されるシーンはテスト自動化、BDD(ビヘイビア駆動開発)とRPA(ロボテック・プロセス・オートメーション)です。テスト自動化の領域に、Robot Frameworkの使用者が多いため、ライブラリのサポートや学習リソースが多いので、学習のコストが減ります。

よく使われるケースは統合テストの段階で、Seleniumのライブラリをインポートしてウェブテスト自動化を行うことです。また、他のライブラリを利用して、デスクトップアプリをテストしたり、テスト失敗の画面のスクリーンショットを取ったり、レポートを作成することも可能です。

Robot Frameworkのテストケースはキーワードで作られます。キーワードは外部ライブラリを利用できるの(例えばSeleniumライブラリ)はもちろん、自分で定義することも可能です。このカスタムできる自由さも魅力的な点です。ここからはRobot Frameworkの詳細を説明します。

・システムアーキテクチャ

図3  Robot Frameworkのシステムアーキテクチャ (出典:https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#high-level-architecture )

図3のように、システムの一番下はPythonで、上は外部ライブラリや自作ライブラリです。一番上のTest Dataはテストケースです。実際は必要なライブラリを導入して、テストケースの作成を注力するだけです。

・テストケースの作成

図4 Robot Frameworkでテストケースを作成する例
  • 1~4行目:SeleniumLibrary、自作ライブラリの導入と自分で定義したキーワードを導入する
  • 6~9行目:キーワードを定義する
  • 12行目:テストケース名を定義する
  • 13~18行目:導入したライブラリのキーワードと自分で定義したキーワードでテストケース内容を作成する

・サポート環境

Robot Frameworkの環境構築:

  • Windows
  • macOS
  • Linux

テストできる環境:ライブラリ次第

開発言語

  • Python (Python2, Python3)
  • Jython (JVM)
  • IronPython (.NET)
  • PyPy

3. Jasmine

次にご紹介するテストフレームワークはJasmineです。JasmineはJavaScript向けてBDDのテストフレームワークですが、上にご紹介した2つとは少し違います。Jasmineは単体テスト(ユニットテスト)段階で使われて、いわゆるユニットテストフレームワークです。

公式の紹介により、Jasmineは他のフレームワークやDOM(Document Object Model)の操作に依存しないという性質があるので、気軽に使うことができます。

  • 特徴
    • CDNを利用できて、気軽に使える。
    • ブラウザでテスト結果を確認できる。
    • 非同期処理対応
    • モック対応のため、実際のデータやデータベースに依存しない
    • 他のフレームワーク(例えばKarmaとか)を組み合わせて、Seleniumのように各ブラウザ環境でテストすることが可能です。テストカバレッジの確認やCI/CDへの整合もできます。

・サポート環境

  1. Jasmineの環境構築
    1. Windows
    2. macOS
    3. Linux
  2. テストできる環境
    1. Node:12.17+
    2. Safari
    3. Chrome
    4. Firefox
    5. Edge
  3. 開発言語
    1. JavaScript

まとめ

最後に、各テスト自動化フレームワークの特徴を一覧表でまとめました。

 SeleniumRobot FrameworkJasmine
適合なテスト段階整合テスト整合テスト単体テスト
環境構築できるプレートフォームWindows, macOS, LinuxWindows, macOS, LinuxWindows, macOS, Linux
テストできる環境Chrome Firefox Edge IE11 Edge for IE Mode Safari Operaライブラリ次第Node 12.17+ Chrome Firefox Safari Edge
サポート開発言語Java Python C# Ruby JavaScript Kotlin  Python (Python2, Python3) Jython (JVM) IronPython (.NET) PyPy  JavaScript
特徴・3つのプロジェクトがあり、気軽にテストケースを作成できる ・レポートの作成ができる・既存のライブラリを使って手間がかからない ・自作のライブラリでカスタム性向上 ・画面のスクリーンショットを取れる ・レポートの作成ができる ・デスクトップアプリのテストも可能・CDNで環境構築は簡単 ・他のフレームワークを依存せず ・他のフレームワークを組み合わせて機能を拡張することが可能 ・レポートの作成ができる
ライセンスApache License 2.0Apache License 2.0MIT License

いかがでしょうか。今回ご紹介したテスト自動化フレームワークはWebベースで、かつオープンソースのフレームワークです。しかしWebベースと言ってもかなり広い範囲であることがご理解いただけるかと思います。

例えば、Jasmineと同じくJavaScriptのユニットテストフレームワークはまた数種類があります。またはテスト対象(デスクトップアプリ、携帯アプリなど)、テスト段階、非機能テストなど様々な領域分野に得意するフレームワークがあります。よってテスト自動化を始めたい時に、課題と自動化したい範囲を明確することが大切です。

そして、各フレームワークの特徴を把握することがスムーズに検討を進めるポイントになります。テスト自動化の領域ではまだまだユニークなテストフレームワークがございますので、ご興味がございましたら是非ご自身で調べてみてください。

誰でもカンタンにテスト自動化ができる時代は、すぐそこまできています。当サイトでは、テスト自動化ツールに興味のある方へ、「テスト自動化 推進ガイドブック」と「テスト自動化ツールT-DASH 基本ガイドブック」のダウンロード資料をご用意しております。ぜひダウンロードいただき、資料をご覧ください。

■参考資料

  1. 独立行政法人情報処理推進機構(IPA) ソフトウェア開発分析データ集2020https://www.ipa.go.jp/files/000085879.pdf
  2. 国際ソフトウェアテスト資格認定委員会(ISTQB)用語集https://glossary.istqb.org/en/search
  3. Selenium公式サイト  https://www.selenium.dev/
  4. Internet ExplorerはMicrosoft Edgeへ–Windows 10のInternet Explorer 11デスクトップアプリは2022年6月15日にサポート終了 https://blogs.windows.com/japan/2021/05/19/the-future-of-internet-explorer-on-windows-10-is-in-microsoft-edge/
  5. Robot Framework公式ガイドブックhttps://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
  6. Jasmine公式サイト https://github.com/jasmine/jasmine