web-dev-qa-db-ja.com

NightwatchJSとWebdriverIOの違いは何ですか?

タイトルにあるように、Nightwatch.jsとWebdriver.ioの違いは何ですか?

それらは同じ構文を持ち、ほとんど同じことをしているようです。それらはどう違いますか?

どちらかを選ぶ必要があります。

45
Presidenten

これらの各ツールを使用して、テストスイートを数回作成しました。

Webdriver.ioを使用すると、テストケースを「ゼロから」作成し、レポートを細かく制御できます。たとえば、slack npmなどのパッケージを使用してslackと統合できます。 node.jsを知っているか、すぐに学ぶ必要があります。デスクトップブラウザーで非常にうまく機能することに加えて、Appium、Android Studio、およびXcodeとうまく統合できるため、Androidエミュレーターで自動テストを実行できます。 iOSシミュレーターローカル:これらのものをインストールし、Appiumに使用するドライバーを指示し、機能を選択するなどのコードを記述する必要があります。

Nightwatchは、イテレータを使用して、テストが失敗した場合にテストを最大3回まで自動的に再試行するかなり広範なソリューションです。 Nightwatchは、VM SauceLabsなどのツールとの統合を適切にサポートしているため、コードを記述せずに、700以上の異なるプラットフォーム/ブラウザー/バージョンの組み合わせに対してテストケースを理論的に実行できます各ドライバーを管理します。ナイトウォッチはSeleniumの起動とシャットダウンを処理します。この最後の印象は非常に印象的ですが、実際には、そのレベルのテスト範囲を達成および維持するのは非常に多くの作業です。懸念事項を分離して、カスタムコマンドを定義し、ベーステストケースまたは個々のテストでそれらを要求できるようにします。テストの一部をモジュール化し、インポートすることで、たとえばログインテストを絶えず書き直す必要がなくなります。さらに、カスタムコマンドを使用して、セレクタをキーと値のペアとしてインポートできます。

それぞれを使用して、このように要約します:

webdriver.io:より高度な制御、非常にカスタム化されたソリューションを探していて、イテレータが必要ない場合、あなたは自信があるブラウザードライバーを選択し、機能を設定するためのコードを記述するのに十分な知識があり、レポートのカスタム制御が必要です。

ナイトウォッチ:特定のプラットフォーム/ブラウザ/バージョンに対して比較的簡単にテストを実行できることを知るために、テストをすぐに書き始めたい場合それでも、カスタムコマンドを記述することにより、テストを柔軟に拡張できます。

もう1つのオプションはDalek.jsで、これにはNightwatchの簡単なスクリプト作成がありますが、すべての機能はありません。

ナイトウォッチを実行する前に、Magellan.jsonファイルでブラウザーを構成し、テストを実行するときに、ブラウザーまたはブラウザーのセット(「プロファイル」)をコマンドライン引数として呼び出します。

ローカルブラウザの場合:

./node_modules/.bin/magellan --serial --browsers=chrome,firefox

Saucelabsアカウントを設定し、ユーザー名とアクセスキーを追加したと仮定すると、次のようなブラウザのプロファイルを呼び出すことができます。

./node_modules/.bin/magellan --serial --profile=myBrowsers

これは、次のようにMagellan.jsonファイルにmyBrowsersというプロファイルが設定されていることを前提としています。

{
    "profiles": {
        "myBrowsers": [
          { "browser": "chrome_46_OS_X_10_10_Desktop" },
          { "browser": "firefox_42_Windows_2012_R2_Desktop" },
          { "browser": "safari_8_OS_X_10_10_Desktop" },
          { "browser": "safari_7_OS_X_10_9_Desktop" }, 
          { "browser": "safari_9_OS_X_10_11_Desktop" }, 
          { "browser": "IE_10_Windows_2012_Desktop" }, 
          { "browser": "IE_11_Windows_2012_R2_Desktop" },
          { "browser": "chrome_45_OS_X_10_8_Desktop" },
          { "browser": "chrome_45_OS_X_10_9_Desktop" },
          { "browser": "chrome_45_OS_X_10_10_Desktop" },
          { "browser": "chrome_45_OS_X_10_11_Desktop" },
          { "browser": "chrome_46_OS_X_10_10_Desktop" }, 
          { "browser": "chrome_45_Windows_10_Desktop" },
          { "browser": "chrome_45_Windows_2003_Desktop" },
          { "browser": "chrome_45_Windows_2008_Desktop" },
          { "browser": "chrome_45_Windows_2012_Desktop" },
          { "browser": "chrome_45_Windows_2012_R2_Desktop" },
          { "browser": "chrome_46_Windows_10_Desktop" },
          { "browser": "chrome_46_Windows_2003_Desktop" },
          { "browser": "chrome_46_Windows_2008_Desktop" },
          { "browser": "chrome_46_Windows_2012_Desktop" },
          { "browser": "chrome_46_Windows_2012_R2_Desktop" }, 
          { "browser": "firefox_42_OS_X_10_9_Desktop" }, 
          { "browser": "firefox_42_Windows_2012_R2_Desktop" },
          { "browser": "Android_4_4_Linux_Samsung_Galaxy_S4_Emulator", "orientation": "portrait" },
          { "browser": "ipad_8_4_iOS_iPad_Simulator", "orientation": "landscape"},
          { "browser": "ipad_8_4_iOS_iPad_Simulator", "orientation": "landscape"},
          { "browser": "ipad_9_0_iOS_iPad_Simulator", "orientation": "landscape"},
          { "browser": "ipad_9_0_iOS_iPad_Simulator", "orientation": "portrait"},
          { "browser": "ipad_9_1_iOS_iPad_Simulator", "orientation": "landscape"},
          { "browser": "ipad_9_1_iOS_iPad_Simulator", "orientation": "portrait"},
          { "browser": "iphone_9_1_iOS_iPhone_Simulator", "orientation": "portrait"},
          { "browser": "iphone_9_1_iOS_iPhone_Simulator", "orientation": "landscape"}

        ]
}

}

便利な(オプションの)コマンドライン引数の一部:

--serial引数を切り替えると、テストの実行がシリアル化され、実行中に返されたエラーを確認できるより詳細なテストエクスペリエンスが得られます。また、テストが完了するまで待機するため、実行にはるかに時間がかかります。

ローカルマシンに存在するブラウザーでテストケースが機能したら、-sauce引数を追加すると、Sauce Labsでサポートされている(現在)760のブラウザーを利用できます。これを端末に貼り付けてリターンキーを押します:

./node_modules/.bin/magellan --serial --list_browsers

テストするデバイス/ブラウザごとに、スクリプトの実行時に--browser =の後に、コピー-貼り付けコマンドラインオプション列のリストをカンマ区切り値として追加するだけです。注:--sauceなしで実行する場合は、-browser = chromeまたは--browser = chrome、firefoxを使用できます

BREAKING IT DOWN:

--sauceを使用せずに--serialを使用してナイトウォッチを使用することは、開始するのに最適な方法です。チェックしたいことを検証し、ソースラボとテストしたい主要なブラウザーですべてのテストに合格、実行、実行する必要があると確信できるまで、スクリプトに取り組みます。主要なブラウザがカバーされていると確信したら、実行時間を短縮するために--serialなしで実行できます(Sauce Labsで役立ちます。費用がかかります)。

しかし、十分な改宗者として、ここでSaucelabsに必要なものを見つけることができます: https://wiki.saucelabs.com/display/DOCS/The+Sauce+Labs+Cookbook+Home

そして、標準的なハローワールドを行うためのナイトウォッチの定型的な例: このボイラープラッターを試してみてください

更新:人々が提起しているいくつかのポイントと、これを投稿してから私に生じました。

Webdriver.io:イテレータがないため、テストの実行中に障害から回復する能力が低いため、障害がより明確になります。これは純粋に非同期であるため、障害の正確な原因を突き止めるのに頭痛の種があるかもしれません。 また、実行中のデータの衝突を避けるために、作成するデータごとに個別の分解スクリプトを作成する必要が生じる場合があります。

Nightwatch.js:イテレータは再試行を許可するため、多くの場合、スクリプトが失敗した場所を見つけることができます。これにより、スクリプトが失敗する理由に集中する代わりに、欠陥をより迅速に見つけることができます。また、個々のスクリプトをオフに切り替えるのも簡単です。

更新2:

Nightwatchでは、短いテストが有用/奨励されます。反復子は、実行の直前に反復ごとにテストファイルをメモリに読み込むため、反復実行の間で文字通りテストを編集できます。別の言い方をしましょう:ナイトウォッチスイート:

test_1 starts
test_1 FAIL    // because you made a trivial error in your test case
test-2 starts  // while it is running, you make the change, save it
test-2 PASS
test_1 starts  // the iteration starts * with your change! *
test_1 PASS
============= Suite Complete =============

     Status: PASSED
    Runtime: 2m 48.3s
Total tests: 2
 Successful: 2 / 2
1 test(s) have retried: 1 time(s)

一方、node/webdriver.ioを使用してSlack webhookをセットアップするのは簡単です。つまり、node/webdriver.ioテストをセットアップして、完了時にSlackに報告することができます。ビルドが完了すると、すぐに次のような自動化の結果が表示されるため、クライアントはこれを高く評価しています。

client OS X Firefox 59.0.2で[サーバーURLまたはIPアドレス]に渡された[クライアント/製品名はこちら]スプリント##。#。#の自動テスト

client [クライアント/製品名はこちら] Sprint ##。#。#の自動テストは、OS X Firefox 59.0.2で[サーバーURLまたはIPアドレス]で失敗しました

更新3(2017年8月6日)

もう1年半を毎日両方で作業してきたので、次の点を追加したいと思います。

NPMパッケージには類似した数のパッケージがあり、それぞれに統合されていますが、Nightwatch(4x)に関するStackoverflowの質問がはるかに多いことに注意してください。これは、Webdriver.ioが自動テストに対する独自のアプローチであるためだと考えています[私の意見です。フィードバック/プッシュバックを歓迎します]。それを使用する人は、それを使用する方法についての質問はありません、彼らは技術についての特定の質問があります。

ナイトウォッチは、豊富なSelenium IDEと堅実なjavascriptの経験を持っている人にとっては、より良いエントリポイントになります。すぐに使える便利なソリューションがたくさんあります。良い選択肢になります。

より多くのjavascriptと、おそらくオブジェクト指向プログラミングとUNIXの経験がある人は、Webdriver.ioの方が優れていると思うでしょう。現在行っているように、独自のカスタムフレームワークを構築するのに最適なオプションです。初期化、フロー制御、レポート機能をどのように機能させ、汗をかくことができるかを想像できれば、それは適切です。

私は、私が好む以下の質問を受け、私ははるかに広範なe2eテストのためにWebdriver.ioを好む。私たちのプラットフォーム上に構築されたほとんどのクライアント作業には、しばしばパーソナライズされたNightwatchリポジトリを使用しますが、自分のWebdriver.ioソリューションを構築するにつれて、近い将来変更される可能性があります。

更新4(2018年5月2日)

Seleniumとブラウザードライバーの制御について明確にするために更新し、AppiumとXcode/Android Studioの使用に関する詳細を追加しました。

78
QualiT