2014-11-06 17 views
15

Chcę przeprowadzić kilka testów z karmą za pomocą wielu przeglądarek. Testy są jednak testami integracyjnymi, które wchodzą w interakcję z bazą danych (pobierają i aktualizują dane). Ponieważ te same testy są uruchamiane w wielu przeglądarkach, wszystkie one współdziałają z tymi samymi danymi testowymi.Ograniczanie równoległej instancji przeglądarki w Karma

W związku z tym, jeśli testy są uruchamiane równolegle w wielu przeglądarkach, jeden test może wpłynąć na inne testy uruchomione w innych przeglądarkach.

Jak mogę ograniczyć liczbę równoczesnych przeglądarek, nadal testując przy użyciu wielu przeglądarek? (Na przykład, wyznaczając do 1 doprowadziłoby do uruchamiania testów dla każdej przeglądarki w sekwencji zamiast równolegle)

+0

Cześć, jak się w końcu rozwiązać ten problem? – Malki

Odpowiedz

3

ta została ustalona w https://github.com/karma-runner/karma/pull/1646 i połączyły się 0.13.2:

współbieżności

Typ: Number

Domyślnie: Nieskończoność

Opis: Ile przeglądarka Karma uruchamia równolegle.

Szczególnie w przypadku usług takich jak SauceLabs i Browserstack warto uruchomić jednocześnie tylko ograniczoną liczbę przeglądarek i rozpocząć dopiero po ich zakończeniu. Korzystając z tej konfiguracji, możesz określić, ile przeglądarek powinno działać jednocześnie w danym momencie.

https://karma-runner.github.io/2.0/config/configuration-file.html

+0

To jest poprawne. Użyj wbudowanej funkcjonalności –

0

Po prostu grubsza:

  • Tworzenie otoki wokół karmy utworzyć obiekt konfiguracji opartej o kryteria
    • w tym wypadku będzie to obiekt konfiguracja od rodzaju przeglądarki Chyba
    • można mieć „szablon konfiguracji” zapisanego w pliku karma.conf.js bez własności przeglądarek
    • Jest sposób programowy do „wzbogacenia” Ten szablon dodając więcej właściwości
  • Wypełnianie kolejce z tych konfiguracji obiektów (może to być prosta tablica)
  • Użyj karma API aby uruchomić serwer karma przekazując odpowiednią konfigurację za każdym razem

Tip: można mieć w tym momencie konfiguracji „wrapper” do przystanku lub prowadzić czy uruchomiona instancja zmierzyć masę błędów

Ten fragment kodu pokazuje, jak załadować i wypełnij konfigurację szablonu:

function getConfigTemplate(path){ 
    var config = { 
    // Maybe you want to add/remove some files from the list 
    // based on some criteria 
    files: [...], 
    // Path of the template file 
    configFile: path 
    } 
    return config; 
} 

var template = getConfigTemplate('/path/to/the/file'); 
// Here I can append more stuff 
template.browsers = ['Chrome'] 

Uwaga: strategię scalania używany w karmie dla dwóch konfiguracjach działa następująco:
- Jeśli właściwość jest w szablonie, a następnie przechodzi bezpośrednio do ostatecznej konfiguracji. Jeśli właściwość nie znajduje się w szablonie, to obiekt konfiguracji "opakowania" jest wyszukiwany dla tej właściwości.
- Jeśli właściwość w szablonie i dodać więcej na tylko opakowanie pierwszy będzie używany, a drugi będzie ignorowany.

Ten kod może być użyty zamiast do „łańcuch” serwery Karma:

var currentServer = 0; 
var configs = [ ... ]; 

function startKarmaServer(config, callback){ 
    karma.server.start(config, function (exitCode){ 

    if(exitCode){ 
     // an error occurred 
     // stop karma! 
    } else { 
     currentServer++; 
     callback(); 
    } 
    }); 
} 

function startServers(){ 
    // here some code to run the karma servers in series 
} 

Polecam async.js dla funkcji startServers.

Jeśli używasz starszej wersji karmy (0.10 lub niższej), możesz poszukać, at this fix, aby zamknąć serwer WWW po wykonaniu.

Należy również zauważyć, że flaga integracji ciągłej (autoWatch) powinna być wyłączona, aby połączenie mogło działać.

0

Jeśli używasz grunt z grunt-karma napisałem this task, który robi to, co chcesz.