wake-up-neo.com

Winkelmesser - Führen Sie mehrere Tests parallel in verschiedenen Browsern durch

Ich kann keine Informationen dazu finden, wie man das einrichten kann, aber es scheint ein ziemlich grundlegendes Konzept zu sein. Ich bin sicher, dass es da draußen eine Antwort gibt. 

Ich weiß, wie Protractor auf verschiedenen Browsern ausgeführt wird, indem ich die browserName -Eigenschaft des capabilities-Objekts in der Konfiguration einstellt. Und das funktioniert super. Ich kann es auf 'chrome' oder 'firefox' oder was immer ich brauche einstellen und es läuft genauso wie erwartet. Die einzige Möglichkeit, eine einzelne Testsuite gegen mehrere Browser auszuführen (soweit ich weiß), besteht darin, separate Konfigurationsdateien mit jeweils unterschiedlichen browserName zu erstellen und dann jeden Browser mit einer eigenen Konfiguration auszuführen. Dies funktioniert, aber es ist wirklich langsam, da die Tests nacheinander statt gleichzeitig ausgeführt werden. 

Gibt es eine Möglichkeit, es auf mehreren Browsern parallel auszuführen?

Kann es mit SauceLabs gemacht werden? oder sogar ein lokales Selenium-Grid?

Wir versuchen nur, unseren Testprozess zu rationalisieren, und das wäre eine große Hilfe. Anregungen oder Informationen wären sehr dankbar. Danke im Voraus.

35
tennisgent

Update Februar 2014 - Diese Antwort ist nicht mehr gültig. Verwenden Sie die Antwort von Paolo Moretti unten.


Es gibt möglicherweise einen besseren Weg, dies zu tun, aber im Moment führe ich diese nur als gleichzeitige Grunt-Aufgaben aus.

1) Fügen Sie das grunt gleichzeitige Plugin hinzu

npm install grunt-concurrent --save-dev

2) Fügen Sie unter grunt.initConfig eine Aufgabe für jeden Browser hinzu. Wir können den Browser als Argument hinzufügen, um unsere Konfigurationsdatei erneut zu verwenden.

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

3) Registrieren Sie diese als Aufgaben;

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

4) Erstellen Sie Ihre gleichzeitige Aufgabe unter grunt.initConfig

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

5) Fügen Sie die Grunt-Aufgabe für gleichzeitig hinzu

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

Wenn Sie das ausführen, sollten Sie gleichzeitig den Winkelmesser testen.

22
Brian F

Dafür gibt es eine neue Option namens multiCapabilities:

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

Hier ist ein vollständiges Beispiel .

62
Paolo Moretti

mit multiCapabilities werden alle Tests in den einzelnen Browsern ausgeführt. Die folgende Konfiguration wird also jeden Test zweimal ausführen, einmal in Firefox und einmal in Chrome:

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

Wenn Sie möchten, dass jede Testdatei nur einmal ausgeführt und auf mehrere Browser aufgeteilt wird, verwenden Sie die Option splitTestsBetweenCapabilities:

splitTestsBetweenCapabilities: true

Dieser Blogbeitrag geht auf die splitTestsBetweenCapabilities weiter ein.

14
Paul

BrowserStack kann auch für diese Zwecke verwendet werden. Es gibt einen ausführlichen Start-Guide: https://www.browserstack.com/automate/node , aber es ist nicht kostenlos

1

So erreiche ich das. Fügen Sie einfach den folgenden Abschnitt der Datei conf.js hinzu:

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

shardTestFiles = true bewirkt, dass jede Spezifikationsdatei in einer neuen Browserinstanz ausgeführt wird. maxInstances ist die maximale Anzahl von Browsern, die gleichzeitig geöffnet sein können.

1
exbuddha

Ich hatte das gleiche Problem und ich habe festgestellt, dass sie die Funktion für die parallele Ausführung hinzufügen, während wir sprechen! : D

Schauen Sie sich das an: https://github.com/angular/protractor/pull/492

Diese Änderung wurde mit master zusammengeführt, aber eine neuere (512) ist noch offen. Sobald sie es zu master zusammenführen (sollte heute oder morgen laut der Diskussion in der Pull-Anfrage sein), sollte es in Ihren Händen liegen: D.

1
Diego Pamio