WEBアプリのテストってどうしてますか?手動でアレコレ操作して変な動作していないかを見るのが普通の流れと思いますが、Nightwatch.jsという自動化の仕組みがあることを知りました。今回はあまり深く踏み込みませんが、概要をご紹介します。

  • どんなものか?

Nightwatch.jsというNode.js上で動作するブラウザ自動テストのフレームワークだそうです。
1

概要、インストール、使い方などはOverviewに詳しく書いてあります。冒頭部分を少し読み込んでみます。

まずNightwatch.js概要。
What is Nightwatch?

Nightwatch.js is an automated testing framework for web applications and websites, written in Node.js and using the W3C WebDriver API (formerly Selenium WebDriver).

It is a complete End-to-End testing solution which aims to simplify writing automated tests and setting up Continuous Integration. Nightwatch can also be used for writing Node.js unit and integration tests.

    The name Nightwatch was inspired by the famous painting The Night Watch by Dutch artist Rembrandt van Rijn. The masterpiece is prominently displayed in the Rijksmuseum, in Amsterdam - The Netherlands.

(Google和訳)
ナイトウォッチとは何ですか?

Nightwatch.jsは、Node.jsで記述され、W3C WebDriver API(以前のSelenium WebDriver)を使用した、WebアプリケーションおよびWebサイトの自動テストフレームワークです。

自動テストの記述と継続的インテグレーションのセットアップを簡素化することを目的とした完全なエンドツーエンドのテストソリューションです。 Nightwatchは、Node.jsの単体テストと統合テストの作成にも使用できます。

     ナイトウォッチという名前は、オランダの芸術家レンブラント・ファン・レインの有名な絵画「ナイトウォッチ」に触発されました。 この傑作は、オランダのアムステルダムにある国立美術館に目立つように展示されています。
次にWebDriverの概要。
Overview of WebDriver

WebDriver is a general purpose library for automating web browsers. It was started as part of the Selenium project, which is a popular and comprehensive set of tools for browser automation, initially written for Java but now with support for most programming languages.

Nightwatch uses the WebDriver API to perform the browser automation related tasks, like opening windows and clicking links for instance.

WebDriver is now a W3C specification aiming to standardize browser automation. WebDriver is a remote control interface that enables introspection and control of user agents. It provides a platform and a restful HTTP api as a way for web browsers to be remotely controlled.

(Google和訳)
WebDriverの概要

WebDriverは、Webブラウザを自動化するための汎用ライブラリです。 Seleniumプロジェクトの一部として開始されました。Seleniumプロジェクトは、最初はJava向けに書かれていましたが、現在ではほとんどのプログラミング言語をサポートする、ブラウザー自動化用の一般的かつ包括的なツールセットです。

Nightwatchは、WebDriver APIを使用して、ウィンドウを開いたり、リンクをクリックしたりするなど、ブラウザーの自動化に関連するタスクを実行します。

WebDriverは、ブラウザーの自動化を標準化することを目的としたW3C仕様になりました。 WebDriverは、ユーザーエージェントのイントロスペクションと制御を可能にするリモートコントロールインターフェイスです。 Webブラウザをリモートで制御する方法として、プラットフォームと安らかなHTTP APIを提供します。

ブラウザ初期化の処理フロー。restful HTTP API…。RESTってこないだ調べたな。アドレス指定可能なURIで公開されている。インタフェースが統一されている。ステートレス(状態を持たない)。処理結果がHTTPステータスコード(404 not foundみたいなの)で通知される。ってやつだ。
Theory of Operation

Nightwatch works by communicating over a restful HTTP API with a WebDriver server (such as ChromeDriver or Selenium Server). The protocol is defined by the W3C WebDriver spec, which is derived from JSON Wire protocol. See below for an example workflow for browser initialization.

Most of the times, Nightwatch needs to send at least 2 requests to the WebDriver server in order to perform a command or assertion, the first one being the request to locate an element given a CSS selector (or Xpath expression) and the next to perform the actual command/assertion on the given element.

(Google和訳)
操作の理論

ナイトウォッチは、安らかなHTTP APIを介してWebDriverサーバー(ChromeDriverやSelenium Serverなど)と通信することで機能します。 プロトコルは、JSON Wireプロトコルから派生したW3C WebDriver仕様で定義されています。 ブラウザの初期化のワークフローの例については、以下を参照してください。

ほとんどの場合、Nightwatchはコマンドまたはアサーションを実行するために少なくとも2つの要求をWebDriverサーバーに送信する必要があります。最初の要求は、CSSセレクター(またはXpath式)を指定した要素を見つける要求であり、次に実行する要求 指定された要素に対する実際のコマンド/アサーション。
1

WebDriver APIはFirefox、Chrome、Microsoft Edge、Safariに対応してるみたい。
1

  • ひとりごと
次回はインストールからやってみます。WEBアプリの自動テストってことですが開発だけに使うのはもったない、WEBで勤怠管理してる方々は入力の自動化が期待できそうですし、膨大なWEBページから情報を抜き出すみたいなことにも応用できるかも?色々アイデアを考えてみます。

続く

スポンサードリンク