54

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

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

私はそれらの中から選択する必要があります。

4

2 に答える 2

91

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

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

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

それぞれを使用したので、次のように要約します。

webdriver.io:より詳細な制御、非常にカスタムなソリューションを探していて、イテレータを必要とせず、ブラウザ ドライバを選択し、機能を設定するためのコードを記述する十分な知識があり、カスタム制御が必要な場合あなたの報告の。

ナイトウォッチ:テストの作成をすぐに開始したい場合は、特定のプラットフォーム/ブラウザー/バージョンに対してテストを実行するのが比較的簡単であり、カスタム コマンドを作成することでテストを大幅に柔軟に拡張できることを知っておく必要があります。

現在利用可能なもう 1 つのオプションは、Dalek.js です。これには、Nightwatch のように簡単にスクリプトを作成できますが、追加機能は一切ありません。

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

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

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

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

./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 を使用して nightwatch を使用することは、開始するのに最適な方法です。確認したいことを検証し、すべてのテストに合格する必要があると確信できるようになるまで、スクリプトを作成します。ソース ラボとテストしたい主要なブラウザーでスクリプトを実行します。主要なブラウザーがカバーされていると確信したら、実行時間を短縮するために --serial なしで実行できます (費用がかかる Sauce Labs で役立ちます)。

しかし、布教活動が十分に行われているので、ここで Saucelabs について必要なものを見つけることができます: https://wiki.saucelabs.com/display/DOCS/The+Sauce+Labs+Cookbook+Home

そして、正規の hello world を実行する Nightwatch のボイラープレートの例については、このボイラープレートを試してください。

更新: 人々が提起し、これを投稿してから私に起こったいくつかの点.

Webdriver.io: イテレータがないため、テスト実行中の障害から回復する能力が低くなります。これは、障害がより決定的であることを意味します。これは純粋に非同期であるため、障害の正確な原因を追跡するのに頭が痛いかもしれません。また、実行中のデータの衝突を避けるために、作成したデータに対して個別の分解スクリプトを作成しなければならない場合もあります。

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

更新 2:

Nightwatch では、より短いテストが有用/推奨されます。イテレータは、実行の直前にすべての反復ごとにテスト ファイルをメモリに読み込むため、文字通り反復実行の間にテストを編集できます。別の言い方をしましょう: あなたの 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 に報告するように設定できるということです。ビルドが完了した後、すぐに次のような自動化の結果が表示されるため、クライアントはこれを高く評価しています。

✅ OS X Firefox 59.0.2 で [サーバー URL または IP アドレス] に渡される [クライアント/製品名] Sprint ##.#.# の自動テスト

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

更新 3 (2017 年 8 月 6 日)

もう1年半、日常的に両方と一緒に働いてきたので、次の点を追加したいと思います.

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

Nightwatch は、豊富な Selenium IDE と確かな JavaScript の経験を持つ人にとっては、より良いエントリー ポイントになるでしょう。すぐに使える便利なソリューションがたくさんあります。ダレクとの経験がほとんどないことから、それも同様に良い選択肢であることがわかります.

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

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

更新 4 (2018 年 5 月 2 日)

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

于 2016-03-14T20:03:37.157 に答える