web-dev-qa-db-ja.com

分度器-異なるブラウザーで複数のテストを並行して実行する

これを設定する方法についての情報を見つけることはできませんが、それはかなり基本的な概念のように思えるので、そこに答えがあると確信しています。

ConfigでbrowserNameオブジェクトのcapabilitiesプロパティを設定することで、異なるブラウザーで分度器を実行する方法を知っています。そして、それはうまく機能しています。 'chrome'または'firefox'または必要なものに設定することができ、期待どおりに実行されます。しかし、(私の知る限り)複数のブラウザーに対して単一のテストスイートを実行する唯一の方法は、それぞれ異なるbrowserNameを持つ個別の構成ファイルを作成してから、各ブラウザーを独自の構成で実行することです。これは機能しますが、テストは同時にではなく順番に実行されるため、非常に遅くなります。

複数のブラウザで並行して実行する方法はありますか?

SauceLabsでできますか?またはローカルのSelenium-Gridを使用していますか?

テストプロセスを合理化しようとしていますが、これは大きな助けになります。どんな提案や情報も大歓迎です。前もって感謝します。

35
tennisgent

2014年2月更新-この回答は無効になりました。以下のPaolo Morettiの回答を使用してください。


これを行うためのより良い方法があるかもしれませんが、現在私はこれらを並行Gruntタスクとして実行しています。

1)同時並行プラグインを追加する

npm install grunt-concurrent --save-dev

2)grunt.initConfigの下に各ブラウザーのタスクを追加します。ブラウザを引数として追加して、構成ファイルを再利用できます。

protractor: {
        options: {
            keepAlive: true,
            singleRun: false,
            configFile: "test/protractor.conf.js"
        },
        run_chrome: {
            options: {
                args: {
                    browser: "chrome"
                }
            }
        },
        run_firefox: {
            options: {
                args: {
                    browser: "firefox"
                }
            }
        }
    },

3)これらをタスクとして登録します。

grunt.registerTask('protractor-chrome', ['protractor:run_chrome']);
grunt.registerTask('protractor-firefox', ['protractor:run_firefox']);

4)grunt.initConfigで並行タスクを作成します

concurrent: {
        protractor_test: ['protractor-chrome', 'protractor-firefox']
    },

5)同時​​実行用のgruntタスクを追加します

grunt.registerTask('protractor-e2e', ['concurrent:protractor_test']);

そして、それを実行すると、分度器のテストが同時に行われます。

22
Brian F

そのためのmultiCapabilitiesという新しいオプションがあります。

multiCapabilities: [{
  'browserName': 'chrome'
}, {
  'browserName': 'firefox'
}],

完全な例 です。

64
Paolo Moretti

multiCapabilitiesを使用すると、各ブラウザーですべてのテストが実行されます。そのため、以下の設定は、Firefoxで1回、Chromeで1回、すべてのテストを2回実行します。

multiCapabilities: [{
  'browserName': 'chrome'
}, {
  'browserName': 'firefox'
}],

各テストファイルを1回だけ実行し、複数のブラウザーに分割する場合は、splitTestsBetweenCapabilitiesオプションを使用します。

splitTestsBetweenCapabilities: true

このブログ投稿splitTestsBetweenCapabilitiesについてさらに詳しく説明します

14
Paul

BrowserStackもこの目的に使用できます。非常に詳細なスタートガイドがあります: https://www.browserstack.com/automate/node ですが、無料ではありません

1

これは私がこれを達成する方法です。 conf.jsファイルに次のセクションを追加するだけです。

capabilities: {
  browserName: 'chrome',
  shardTestFiles: true,
  maxInstances: 1
}

shardTestFiles = trueは、各specファイルを新しいブラウザインスタンスで実行します。 maxInstancesは、同時に開くことができるブラウザの最大数です。

1
exbuddha

私は同じ問題を抱えていましたが、私たちが話すように、彼らは並列実行のための機能を追加していることがわかりました! :D

これを見てください: https://github.com/angular/protractor/pull/492

その変更はマスターにマージされましたが、新しいもの(512)はまだ開いています。彼らがそれをマスターにマージするとすぐに(プルリクエストの議論によれば今日か明日でなければなりません)、あなたの手にあるはずです:D。

1
Diego Pamio