Co to jest Cypress Json: 11 faktów, które powinieneś wiedzieć

Omówimy strukturę JSON, przykłady i szczegółowe praktyczne doświadczenie dotyczące pisania JSON w naszym kodzie. Ale najpierw zagłębmy się w nasz artykuł!

Co to jest Cypress Json: przykład, schemat, szczegółowa analiza praktyczna

W naszym poprzednim artykuł, omówiliśmy zmienne i aliasy oraz jak napisać nasz pierwszy przypadek testowy. Teraz omówimy Cypress JSON i sposób włączenia go do naszego kodu.

cyprys json

Spis treści

Cyprysowy plik JSON

Jak widzieliśmy wcześniej, po pierwszym otwarciu naszego Cypress Test Runner, tworzy on cyprys.json plik. Ten plik służy do przekazywania wszelkich wymaganych przez nas wartości konfiguracyjnych. Więc najpierw przyjrzymy się opcjom, które możemy przekazać w naszym cypress.json plik.

Domyślne opcje JSON

Niektóre opcje są domyślnie ustawione w Cypress. Możemy je jednak dostosować do naszego projektu. Aby zidentyfikować domyślne wartości ustawione przez Cypress, przejdź do Ustawienia folder w naszym Cypress Test Runner. Stamtąd rozwiń opcję Konfiguracja, aby wyświetlić domyślne opcje ustawione przez Cypress.

ustawienia konfiguracyjne
Cyprysowy plik JSON

Opcje są domyślnymi konfiguracjami dostarczonymi przez Cypress.

{
animationDistanceThreshold:5
baseUrl:null
blockHosts:null
browsers:Chrome, Firefox, Electron
chromeWebSecurity:true
component:{}
componentFolder:"cypress/component"
defaultCommandTimeout:4000
downloadsFolder:"cypress/downloads"
e2e:{}
env:null
execTimeout:60000
experimentalFetchPolyfill:false
experimentalInteractiveRunEvents:false
experimentalSourceRewriting:false
experimentalStudio:false
fileServerFolder:""
firefoxGcInterval:runMode, openMode
fixturesFolder:"cypress/fixtures"
hosts:null
ignoreTestFiles:".hot-update.js" includeShadowDom:false integrationFolder:"cypress/integration" modifyObstructiveCode:true nodeVersion:"default" numTestsKeptInMemory:50 pageLoadTimeout:60000 pluginsFile:"cypress/plugins" port:null projectId:"hpcsem" redirectionLimit:20 reporter:"spec" reporterOptions:null requestTimeout:5000 responseTimeout:30000 retries:runMode, openMode screenshotOnRunFailure:true screenshotsFolder:"cypress/screenshots" scrollBehavior:"top" supportFile:"cypress/support" taskTimeout:60000 testFiles:"/.*"
trashAssetsBeforeRuns:true
userAgent:null
video:true
videoCompression:32
videosFolder:"cypress/videos"
videoUploadOnPasses:true
viewportHeight:660
viewportWidth:1000
waitForAnimations:true
watchForFileChanges:true
}

Opcje

Możemy zmienić domyślne opcje Cypressa, przekazując dowolne argumenty zgodne z naszym projektem. Jak sama nazwa wskazuje, cypress.json jest plikiem JSON, więc musimy przekazać nasze argumenty w formacie JSON. W naszym kodzie VS widać, że cypress.json jest pusty i nie są do niego przekazywane żadne argumenty. Zobaczmy teraz różne opcje, które możemy przekazać w naszym pliku JSON.

Opcje globalne

Możemy przekazać opcje globalne do argumentów, które muszą być dostępne globalnie. Na przykład w poniższej tabeli kolumna Options reprezentuje słowo kluczowe, które będziemy przekazywać w naszym pliku JSON; Default wskazuje domyślną wartość danej opcji ustawionej przez Cypress, a Description wskazuje znaczenie opcji.

OptionDomyślnieOpis
baseUrlnullMożemy ustawić adres URL globalnie zamiast przekazywać w każdym pliku. Może być używany do cy.visit() or cy.request() Polecenia
clientCertificates[]Możesz użyć tej opcji do konfiguracji certyfikatów klienta na podstawie adresu URL
env{}Jako wartość można przekazać dowolne zmienne środowiskowe. Ta opcja przyda się, jeśli testujemy naszą aplikację w różnych środowiskach, takich jak staging czy produkcja.
watchForFileChangestrueTa opcja sprawdza, czy Cypress obserwuje i ponownie uruchamia testy po wprowadzeniu jakichkolwiek zmian w plikach.
portnullMożemy przekazać numer portu na hosting Cypress. Generowany jest losowy port, ale możemy dodać wymagany numer portu.
numTestsKeptInMemory50Ta opcja określa liczbę migawek testowych i danych poleceń przechowywanych w pamięci. Jeśli podczas testu w przeglądarce występuje duże zużycie pamięci, możemy tę liczbę zmniejszyć.
retries{ "runMode": 0, "openMode": 0 }Ta opcja służy do określenia liczby ponownych prób testu, który zakończył się niepowodzeniem. Możemy go osobno skonfigurować dla cyprys run i cyprys otwarty.
redirectionLimit20Możemy skonfigurować limit liczby przekierowań aplikacji, zanim wystąpi błąd.
includeShadowDomfalseMożliwość poruszania się po Shadow DOM w celu interakcji z elementami. Domyślnie jest ustawiony na false. Jeśli w naszej aplikacji jest jakiś element, który wymaga nawigacji shadow root, możesz ustawić go na true.

Limit czasu cyprysowego JSON

Limit czasu jest jednym z najważniejszych pojęć w każdym frameworku automatyzacji. Cypress zapewnia wiele opcji, które pomagają w obsłudze limitów czasu w naszych skryptach. Najpierw przyjrzymy się opcjom, które możemy skonfigurować.

OptionDomyślnieOpis
defaultCommandTimeout4000Ta opcja polega na oczekiwaniu na załadowanie poleceń opartych na elementach DOM. To jest w milisekundach.
requestTimeout5000Czas w milisekundach oczekiwania na żądanie komendy cy.wait() w celu przekroczenia limitu czasu.
responseTimeout30000Ten limit czasu ma czekać na odpowiedź w serii poleceń, takich jak  cy.request()cy.wait()cy.fixture()cy.getCookie()
cy.getCookies()cy.setCookie()cy.clearCookie()cy.clearCookies()cy.screenshot() Polecenia
taskTimeout60000Limit czasu, w milisekundach, na zakończenie wykonania cy.task() komenda
execTimeout60000Tym razem w milisekundach jest oczekiwanie na zakończenie wykonywania cy.exec() Komenda,
co jest uzupełnieniem polecenia systemowego
pageLoadTimeout60000Ten limit czasu czeka na page navigation events lub polecenia, które oddziałują
ze stronami takimi jak cy.visit()cy.go()cy.reload()

Cyprys odczytuje plik JSON

Czasami będziemy musieli wejść w interakcję z folderami lub plikami w naszym projekcie. Aby wchodzić w interakcje, musimy ustawić pewne opcje w naszym cypress.json plik do manipulowania plikami. Przyjrzyjmy się więc najpierw opcjom dostępnym w naszej konfiguracji folderów/plików.

OptionDomyślnieOpis
downloadsFoldercypress/downloadsJest to ścieżka, do której pliki są pobierane i przechowywane podczas uruchomienia testowego
fixturesFoldercypress/fixturesTo jest ścieżka do folderu zawierającego pliki urządzeń. Możemy przejść false aby wyłączyć przechowywanie plików.
ignoreTestFiles*.hot-update.jsYou can pass this as a string or array of global patterns to ignore test files for the test run. However, it would be displayed in the test files.
integrationFoldercypress/integrationPliki testów integracji są przechowywane w tej ścieżce do folderu.
pluginsFilecypress/plugins/index.jsTa ścieżka to miejsce, w którym przechowywane są wtyczki. Możesz przekazać argument jako false, aby wyłączyć tę konfigurację.
screenshotsFoldercypress/screenshotsScreenshots from the execution of cy.screenshot() command and test failure during cypress run are stored in this foldersupportFilecypress/support/index.jsHere the test files that load before the test are stored. You have the option to disable by passing false
testFiles**/*.*Ścieżka do plików testowych, które należy załadować. Jest to łańcuch znaków lub tablica wzorców globalnych.
videosFoldercypress/videosŚcieżka folderu, w którym będą przechowywane filmy podczas wykonywania testu

Zrzuty ekranu i opcje wideo

Możemy skonfigurować nasze migawki i filmy w naszym pliku cypress.json(), a Cypress zapewnia nam kilka opcji dostosowania naszej konfiguracji.

OptionDomyślnieOpis
screenshotOnRunFailuretrueMożliwość ustawienia na true lub false, czy Cypress robi zrzut ekranu podczas niepowodzenia testu, gdy cypress działa. Jest ustawiony na true domyślnie
trashAssetsBeforeRunstrueTa opcja umożliwia usunięcie zasobów w videosFolder, downloadsFolder i screenshotsFolder przed każdym cypress run
videoCompression32Ta opcja to jakość kompresji wideo mierzona we współczynniku stałej szybkości (CRF). Mijając false, możesz również wyłączyć tę opcję. Możesz przekazywać wartości od 0 do 51, gdzie najniższa wartość daje lepszą jakość.
videosFoldercypress/videosFolder, w którym zapisywane jest wideo z testów.
videotrueWartość logiczna do przechwytywania wideo z wykonania testu za pomocą cypress run.
videoUploadOnPassestrueTa opcja polega na przesłaniu filmów do pulpitu nawigacyjnego, gdy wszystkie przypadki testowe w pliku specyfikacji zakończą się pomyślnie.

Widoczność i możliwość działania

Możesz konfigurować i przekazywać wartości, aby zmienić wysokość i szerokość rzutni za pomocą opcji oferowanych przez Cypress. Można również skonfigurować opcje działania.

OptionDomyślnieOpis
viewportHeight660Ma to na celu zapewnienie domyślnej wysokości aplikacji w pikselach. Możemy zmienić to polecenie za pomocą cy.viewport()
viewportWidth1000Opcja szerokości widocznego obszaru w pikselach dla aplikacji. Można nadpisać za pomocą cy.viewport() dowództwo.
animationDistanceThreshold5Wartość progowa odległości mierzonej w pikselach, o którą element musi przekroczyć, biorąc pod uwagę czas animacji.
waitForAnimationstrueOpcja oczekiwania na zakończenie animacji elementów przed wykonaniem jakichkolwiek poleceń.
scrollBehaviortopJest to opcja rzutni, która musi przewinąć do elementu tuż przed wykonaniem jakichkolwiek poleceń. Dostępne opcje to 'center''top''bottom''nearest'lub false, W którym false wyłącza przewijanie.

Cyprysowy przykład JSON

Wcześniej widzieliśmy różne konfiguracje, które możemy przekazać w naszym cypress.json plik. Teraz przyjrzymy się przykładowi, jak ich użyć w naszym projekcie.

Zastępowanie wartości domyślnych w pliku cypress.json

W naszym kodzie VS otwórz cypress.json plik. Zastąpimy defaultCommandTimeout polecenie do 8000.

{
    "defaultCommandTimeout" : 8000
}

Tak to wygląda w naszym projekcie VS code.

domyślny limit czasu
plik cypress.json

Zmieniając cypress.json pliku, dotyczy całego frameworka. Możemy to zweryfikować, przechodząc do naszych ustawień Cypress. Zmieniła się z domyślnej wartości 4000 do 8000

ustawienia cyprysowe
Domyślne wartości ustawień cyprysu

Zastępowanie wartości domyślnych za pomocą skryptu testowego

Możemy również manipulować wartościami domyślnymi za pomocą naszego skryptu testowego. Zamiast przechodzić w cypress.json plik, przekażemy go w naszym pliku testowym.


//Changing the timeout from 4 seconds to 8 seconds
Cypress.config('defaultCommandTimeout',8000)

// Test code
cy.get('#username').type(users.email)
cy.get('#pswd').type(users.password)
cy.get('#login_btn').click()

W ten sposób możemy nadpisać wartości domyślne w naszym pliku testowym. Nie ma to jednak wpływu na żadne zmiany konfiguracji na poziomie struktury. Cypress daje pierwszeństwo wartościom w cypress.json. Na koniec zajmuje konfiguracje globalne.

Tablica JSON oprawy cypress

Cyprys cy.fixture() to funkcja, która ładuje ustalony zestaw danych do pliku. Możemy użyć urządzenia jako JSON do załadowania dowolnych wartości lub tablicy w pliku JSON. Najpierw zrozumiemy, jak uzyskać dostęp do pliku JSON w naszym projekcie.

Mój plik JSON ma dwie właściwości: nazwę użytkownika i hasło. Moja nazwa pliku JSON to examples.json.

{
"email": "[email protected]",
"password" : test123
}

W naszym pliku spec uzyskamy dostęp do naszego urządzenia za pomocą polecenia cy.fixture() i koncepcji aliasy.

 cy.fixture('example.json').as('example')

 //Using the alias name to this keyword, So we can use globally  
        const userObj = this.userData
//looping our .json data with a new variable users
         cy.get(userData).each((users) => 
         {
              //Write the test code.
        cy.get('#username').type(users.email)
        cy.get('#pswd').type(users.password)
          }       

Cyprys env JSON

Zmienne środowiskowe są używane w wielu projektach w organizacjach. Używamy zmiennych środowiskowych

  • gdy wartości są dynamiczne na różnych maszynach
  • gdy chcemy testować w różnych środowiskach, takich jak staging, testowanie, rozwój, produkcja/na żywo

Te przypadki wymagają od nas zdefiniowania zmiennych środowiskowych. Jeśli jednak ustawimy zmienną env w jednym pliku specyfikacji, nie będzie ona odzwierciedlona w innych plikach specyfikacji. Dzieje się tak, ponieważ Cypress uruchamia każdy plik specyfikacji niezależnie. W ten sposób będziemy musieli osobno skonfigurować zmienne env.

Mamy dostęp do naszych plików środowiska z naszego pliku Cypress JSON, tj. cypress.json plik. Więc będziemy musieli przypisać opcję w naszym cypress.json i użył go w naszym pliku specyfikacji. Zanurzmy się więc w naszym przykładzie.

Możemy ustawić nasze zmienne środowiskowe w naszym pliku konfiguracyjnym lub cypress.env.json plik.

Ustawianie zmiennej środowiskowej w pliku cypress.json

Ustawiamy właściwość env za pomocą pary klucz-wartość. Wszelkie wartości przekazywane pod słowem kluczowym env wchodzą pod zmienne środowiskowe, a Cypress bierze argument z env słowo kluczowe. Składnia wygląda jak poniżej.

{
  "env": {
    "key1": "value1",
    "key2": "value2"
  }
}

Jeśli chcemy uzyskać dostęp do env zmiennej w naszym pliku spec, przypisujemy je, jak wspomniano poniżej.

Cypress.env() //returns both the key1,value1 and key2, value2

Cypress.env(key1) //returns only the value1

Dodamy env w naszym projekcie i uzyska do nich dostęp w naszym pliku spec. W naszym cypress.json pliku, dodaj następującą konfigurację. Ustawiamy nasze URL właściwości i przypisanie ich do naszego adresu URL. Tutaj, URL jest kluczem i https://techiescience.com/technology/ to wartość.

{
  "env" : {
      "url" : "https://techiescience.com/technology/"
    }
}

Jak zadeklarowaliśmy konfigurację, będziemy mieli do nich dostęp w naszym pliku spec. Wygląda to jak poniżej. Jak wspomniano powyżej, będziemy używać Cypress.env() metoda dostępu do zmiennej env.

// type definitions for Cypress object "cy"
// <reference types="cypress" />

describe('Cypress Example ', function () {

    it('accessing the environment variable', function () {

        //Calling URL from cypress.json
        cy.visit(Cypress.env('url'));

    })
})

Ustawianie zmiennej środowiskowej w pliku cypress.env.json

Możemy przypisać naszą zmienną środowiskową w naszym pliku cypress env JSON. W tym celu powinniśmy stworzyć nowy plik o nazwie cypress.env.json u podstaw projektu. Nie będziemy wymagać env słowo kluczowe; zamiast tego możemy uzyskać do nich bezpośredni dostęp, przekazując parę klucz-wartość.

{
    "key1": "value1",
    "key2": "value2"
}

Przyjrzyjmy się, jak przypisać je w naszym cypress.env.json plik.

{
    "url" : "https://techiescience.com/",
    "urlTechnology" : "https://techiescience.com/technology/"
}
url cyprys
Utworzenie pliku cypress.env.json

Jak widać powyżej, stworzyliśmy nowy plik, cypress.env.jsoni dodał nasz URL nieruchomości. Sposób dostępu do zmiennych środowiskowych byłby taki sam, jak wspomniano powyżej w poprzedniej sekcji.

Cyprysowy reporter JSON

Jak wiemy, Cypress jest zbudowany na Mocha; można użyć dowolnych reporterów stworzonych dla Mocha. Możemy skonfigurować reporter w naszym pliku JSON globalnie w naszym cypress.json plik.

reporterspecTutaj możesz określić reportera, który powinien wygenerować podczas uruchamiania cyprysu. Jest ustawiony na spec jako domyślny reporter.
reporterOptionsnullMa to na celu określenie obsługiwanych opcji dla reportera.

Wspomniane powyżej opcje to konfiguracje ustawione domyślnie w Reporterze. Ponadto spec reporter jest ustawiony domyślnie. Tym samym w reporterze możemy ustawić dowolny reporter, który jest kompatybilny z Mocha. reporterOptions jest określenie obsługiwanych opcji w zależności od konfigurowanego przez nas reportera.

Zobaczmy, jak skonfigurować reporter w naszym cypress.json plik.

Potraktujmy multireportera mochawe jako naszego reportera. Najpierw zainstalujemy reporter i dodamy je do naszego cypress.json plik.

npm install --save-dev mocha cypress-multi-reporters mochawesome

Zainstaluj reporter, przekazując powyższe polecenie w wierszu poleceń. Teraz w naszym cypress.json pliku, dodaj następującą właściwość.

"reporter": "cypress-multi-reporters",
  "reporterOptions": {
      "reportDir": "cypress/reports/multireports",
      "overwrite": false,
      "html": false,
      "json": true
    }

Zrozumiemy szczegółowo każdą z właściwości.

reporter: Nazwisko reportera, którego konfigurujemy w naszym projekcie

raportDir: Katalog, w którym zamierzamy wyprowadzić nasze wyniki.

przepisać: Ta flaga prosi o nadpisanie poprzednich raportów.

html: Generuje raport z zakończenia testu.

json: czy generować plik JSON po zakończeniu testu.

plik cypress.json
Cypress Reporter w cyprysowym pliku JSON

Cyprys pakiet-lock.json

Połączenia pakiet-lock.json plik jest tworzony automatycznie dla wszelkich operacji, gdy npm modyfikuje moduły węzła lub plik package.json. Kiedy dodamy jakieś opcje lub zainstaluj nowe zależności do naszego Cypress pakiet JSON, a następnie pakiet Cypress package-lock.json zostanie automatycznie zaktualizowany.

Pakiet Cypess.lock JSON plik śledzi każdy pakiet i jego wersję, dzięki czemu instalacje są utrzymywane i aktualizowane globalnie przy każdej instalacji npm. Tak więc w naszym pliku JSON pakietu Cypress, gdy aktualizujemy wersję lub dodajemy jakąkolwiek zależność, plik package-lock.json również zostaje zaktualizowany i nie chcemy wprowadzać w nim żadnych zmian.

blokada pakietu json cypress
Cyprys pakiet-lock.json plik