devnews.pl

Main Menu

  • Informacje
    • Systemy i przeglądarki
    • Gadżety
  • Narzędzia
  • Frontend
  • Backend
  • QA
  • Języki programowania

logo

devnews.pl

  • Informacje
    • Systemy i przeglądarki
    • Gadżety
  • Narzędzia
  • Frontend
  • Backend
  • QA
  • Języki programowania
QA
Home›QA›Równoległe uruchamianie testów w Mocha v8.0.0

Równoległe uruchamianie testów w Mocha v8.0.0

By Bernadeta Zapała
15 czerwca 2020
137
0
Share:

Nowowydana wersja Mocha v8.0.0 zawiera wiele przełomowych zmian, m.in. testowanie równoległe. Mocha jest platformą testową Java Script. Działa na Node.js, a także w przeglądarce, co pozwala na łatwe i przyjemne testowanie asynchroniczne. Wcześniej testy przeprowadzano szeregowo – jeden test musiał się zakończyć przed przejściem do następnego. Niewątpliwie umożliwiało to większą elastyczność i precyzję w raportowaniu. Jednocześnie, mapował nieprzechwycone wyjątki do odpowiednich testowych przypadków. Jednak w przypadku dużych zestawów testowych występowały znaczące błędy.

Mocha v8.0.0

Najważniejsze zmiany w Mocha v8.0.0

Wśród ważniejszych zmian jest koniec obsługi Node.js w wersji 8.x, z której zrezygnowało (albo planuje zrezygnować) już większość bibliotek. Nie obsługuje się już ostrzeżenia mocha.opt, a także usunięto enableTimeout()( this.enableTimeout()) z obiektu kontekstu. Zniknęły także przestarzałe interfejsy API  – Mocha.prototype.ignoreLeaks(), Mocha.prototype.useColors(), Mocha.prototype.useInlineDiffs(), Mocha.prototype.hideDiff().

Tryb równoległy

Mocha v8.0.0 obsługuje teraz pod Node.js uruchamianie testów w trybie równoległym. W związku z tym, platforma może korzystać z procesorów wielordzeniowych, co dalej pozwala na znaczne przyspieszenie dużych pakietów testowych.

Uruchamianie

Najczęściej, aby włączyć tryb równoległy wystarczy dostarczyć flagę –parallel do pliku wykonywalnego mocha.

mocha --parallel test/*.spec.js

Po uruchomieniu, w związku z wieloma zmiennymi (Mocha, Node.js, system operacyjny, procesor), różne testy zgłaszają wyjątki dotyczące przekroczenia limitu czasu. Wskazuje to raczej na większe obciążenie systemu czy niedeterministycznej kolejności wykonywania niż na problem związany z trybem równoległym.  Jedną z propozycji rozwiązania jest zwiększenie limitu czasu testu przykładowo z 300 ms do 1000 ms.

# .mocharc.yml

# ...

timeout: 1000

Optymalizacja testów równoległych

Przyjmując, że n jest liczbą rdzeni procesora w komputerze, to domyślna maksymalna liczba zadań Mocha’i wynosi n-1. Nie jest to optymalna wartość dla każdego projektu. Wszystko zależy od systemu operacyjnego, nawet ilość używanych rdzeni procesora.

Przykładowo: Dla ośmiordzeniowego procesora, Mocha domyślnie używa siedmiu procesów roboczych. Przeprowadzony test w trybie równoległym trwa prawie 76 sekund, co jest 53% przyspieszeniem. Jednak, jeśli zwiększymy liczbę procesów do 12 (więcej, niż liczba procesorów), trwa jeszcze krócej. Oznacza to, że prawdopodobnie równoległe testy Mocha nie są związane z procesorem i operacje wykonywane są asynchronicznie.

Kiedy nie stosować testów równoległych?

Istotne jest to, że Mocha nie uruchamia równolegle poszczególnych testów, tylko pliki testowe. Jeśli podamy pojedynczy plik testowy, utworzy się pojedynczy proces roboczy. Dopiero on uruchomi ten plik. Ponadto, odradzanie procesów roboczych nie jest bezpłatne. Jeśli mamy tylko jeden plik testowy, możemy zostać ukarani za używanie trybu równoległego.

Oprócz tego istnieje pewien punkt przegięcia, po przekroczeniu którego testy będą wolniejsze niż w szeregowym testowaniu. Nowy tryb równoległy nie jest idealny, ale stwarza miejsce na kolejne ulepszenia.

Root Hook

Aby hooki Root działały w trybie równoległym muszą być zdefiniowane za pomocą Root Hook Plugins. Są to moduły CJS lub ESM które mają nazwany eksport MochaHooks. Użytkownik może dowolnie w nich definiować hooki.

Źródła:

  • https://github.com/mochajs/mocha/releases
  • https://developer.ibm.com/technologies/node-js/articles/parallel-tests-mocha-v8
TagsJavaScriptMochaQATesty równoległe

Share:

  • Surface Laptop 1 i 2
    GadżetyInformacje

    Surface Laptop 1 i 2 z aktualizacją ładowania

  • Systemy i przeglądarki

    Więcej opcji zmiennych czcionek w systemie macOS

  • Informacje

    Działalność open source Google w liczbach

  • 3 marca 2021

    Vite 2.0 wydane z nowymi wtyczkami

  • 25 lutego 2021

    ReacType 5.0 – zmiany we wprowadzaniu komponentów

  • 23 lutego 2021

    Dapr v.1.0 gotowy do fazy produkcji

  • 22 lutego 2021

    ReScript 9.0 z zewnętrzną konfiguracją stdlib

  • 22 lutego 2021

    One UI 3.1 z ciekawymi nowościami dla urządzeń Samsunga

  • 22 lutego 2021

    Windows Terminal Preview 1.6 z nową sekcją ustawień

  • 15 lutego 2021

    Visual Studio Code 1.53 z ulepszeniami debugowania

  • 8 lutego 2021

    Edge 89 beta, Edge Dev 90 i nowości na kanale Canary

  • 2 lutego 2021

    Firefox 85 i Firefox Nightly – nowe wersje przeglądarki Mozilli

  • 29 stycznia 2021

    Billboard.js 2.2.0 z nowymi funkcjami wykresów

  • 26 stycznia 2021

    Kendo UI R1 2021 – nowości dla bibliotek

  • 21 stycznia 2021

    Narzędzie Vno – połączenie Vue i Deno

  • 19 stycznia 2021

    GitHub Enterprise Server 3.0 RC – kandydat do wydania

  • 15 stycznia 2021

    TypeScript 4.2 Beta z ulepszeniami typów krotek

  • 13 stycznia 2021

    Styczniowy Patch Tuesday z luką 0-day

  • 11 stycznia 2021

    Safari Technology Preview 118 dostępne dla programistów

  • 8 stycznia 2021

    Microsoft Launcher na Androida z usprawnionym dotykiem

  • 7 stycznia 2021

    WebStorm 2020.3.1 dostępny dla urządzeń z Apple Silicon

  • 22 grudnia 2020

    ReScript 8.4 z przypiętymi zależnościami

  • 14 grudnia 2020

    Edge 88 beta i przeglądarka na kanale Canary dostępne!

  • 9 grudnia 2020

    Chrome 88 Beta z nowościami w WebXR

  • 9 grudnia 2020

    Snowpack 3.0 RC z eksperymentalnymi funkcjami

  • 4 grudnia 2020

    Android Studio Arctic Fox – nowe wydanie narzędzia Google

  • 4 grudnia 2020

    The Hack Summit 2020 – konferencja IT Security

  • 2 grudnia 2020

    PowerToys 0.27 z poprawkami błędów

  • 2 grudnia 2020

    Aleph.js alfa z funkcją importowania map

  • 27 listopada 2020

    Cypress 6.0 zwiększa zakres możliwości obsługi sieci

  • 26 listopada 2020

    Firefox 83 przyspiesza i wprowadza tryb HTTPS-Only

  • 25 listopada 2020

    Electron 11.0 z obsługą Apple Silicon

  • 25 listopada 2020

    Prettier 2.2 z obsługą najnowszego TypeScript 4.1

 

 

Jesteśmy pasjonatami najnowszych technologii w świecie programowania. Zbieramy dla Was informacje i porady z całego świata, które sprawią, że Twoja praca stanie się jeszcze bardziej efektywna.

Obserwuj nas codziennie, aby być na bieżąco oraz śmiało udostępniaj nasze posty.

Zespół DevNews

Kategorie

  • Backend
  • Bez kategorii
  • Frontend
  • Gadżety
  • Informacje
  • Języki programowania
  • Narzędzia
  • QA
  • Systemy i przeglądarki

OBSERWUJ NAS

KONTAKT

Chcesz się z nami skontaktować?

Napisz do nas wiadomość: kontakt@devnews.pl

www.devnews.pl | DEVNEWS 2020 | Newsy i ciekawostki ze świata IT