Wat is Cypress Json: 11 feiten die u moet weten?

We zullen de JSON-structuur, voorbeelden en gedetailleerde praktische ervaring bespreken om JSON in onze code te schrijven. Maar laten we eerst in ons artikel duiken!

Wat is Cypress Json: voorbeeld, schema, gedetailleerde praktische analyse?

In onze vorige dit artikel, bespraken we variabelen en aliassen en hoe we onze eerste testcase moesten schrijven. Nu zullen we Cypress JSON bespreken en hoe we het in onze code kunnen opnemen.

cipres json

Inhoudsopgave

Cypress JSON-bestand

Zoals we eerder zagen, creëert het de eerste keer dat we onze Cypress Test Runner openen een cipres.json het dossier. Dit bestand wordt gebruikt om alle configuratiewaarden door te geven die we nodig hebben. Dus eerst zullen we kijken naar de opties die we kunnen doorgeven in onze cypress.json bestand.

Standaard JSON-opties

Bepaalde opties zijn standaard ingesteld in Cypress. We kunnen ze echter aanpassen aan ons project. Om de standaardwaarden te identificeren die zijn ingesteld door Cypress, navigeert u naar de Instellingen map in onze Cypress Test Runner. Vouw vanaf daar de configuratieoptie uit om de standaardopties te bekijken die door Cypress zijn ingesteld.

configuratie-instellingen
Cypress JSON-bestand

De opties zijn de standaardconfiguraties die door Cypress worden geleverd.

{
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
}

Opties

We kunnen de standaardopties van Cypress wijzigen door alle argumenten door te geven die compatibel zijn met ons project. Zoals de naam al doet vermoeden, is cypress.json een JSON-bestand, dus we moeten onze argumenten doorgeven in JSON-indeling. In onze VS-code kon je zien dat de cypress.json leeg is zonder dat er argumenten aan zijn doorgegeven. Laten we nu de verschillende opties bekijken die we kunnen doorgeven in ons JSON-bestand.

Wereldwijde opties

We kunnen de globale opties doorgeven aan argumenten die wereldwijd moeten worden benaderd. In de onderstaande tabel vertegenwoordigt de kolom Opties bijvoorbeeld het trefwoord dat we in ons JSON-bestand zullen doorgeven; Standaard geeft de standaardwaarde aan van de specifieke optie die is ingesteld door Cypress, en Beschrijving geeft de betekenis van de optie aan.

KeuzeStandaardOmschrijving
baseUrlnullWe kunnen de URL globaal instellen in plaats van elk bestand door te geven. Het kan worden gebruikt voor cy.visit() or cy.request() commando's
clientCertificates[]U kunt deze optie gebruiken om clientcertificaten op URL-basis te configureren
env{}U kunt alle omgevingsvariabelen als waarde doorgeven. Deze optie is handig als we onze applicatie testen in verschillende omgevingen, zoals staging of productie.
watchForFileChangestrueDeze optie controleert of Cypress de tests bekijkt en opnieuw start op eventuele bestandswijzigingen.
portnullWe kunnen het poortnummer doorgeven bij het hosten van Cypress. Er wordt een willekeurige poort gegenereerd, maar we kunnen het gewenste poortnummer toevoegen.
numTestsKeptInMemory50Deze optie is het aantal testmomentopnamen en opdrachtgegevens dat in het geheugen is opgeslagen. Als er tijdens een testrun een hoog geheugenverbruik in de browser is, kunnen we het aantal verminderen.
retries{ "runMode": 0, "openMode": 0 }Deze optie is om het aantal keren op te geven dat een mislukte test opnieuw moet worden geprobeerd. We kunnen het apart configureren voor: cipres run en cipres open.
redirectionLimit20We kunnen de limiet configureren voor het aantal keren dat de applicatie kan worden omgeleid voordat er een fout optreedt.
includeShadowDomfalseDe mogelijkheid om binnen de Shadow DOM te navigeren om met elementen te communiceren. Standaard is deze ingesteld op false. Als onze applicatie een element heeft waarvoor schaduwwortelnavigatie vereist is, kunt u dit instellen op: true.

Cypress JSON-time-out

Time-out is een van de belangrijkste concepten in elk automatiseringsraamwerk. Cypress biedt een verscheidenheid aan opties die helpen bij het afhandelen van time-outs in onze scripts. Eerst zullen we kijken naar de opties die we kunnen configureren.

KeuzeStandaardOmschrijving
defaultCommandTimeout4000Deze optie is om te wachten tot de op DOM Elements gebaseerde opdrachten zijn geladen. Dit is in milliseconden.
requestTimeout5000Tijd, in milliseconden, om te wachten tot het verzoek van de opdracht cy.wait() om een ​​time-out te krijgen.
responseTimeout30000Deze time-out is om te wachten tot een reactie in een reeks opdrachten zoals:  cy.request()cy.wait()cy.fixture()cy.getCookie()
cy.getCookies()cy.setCookie()cy.clearCookie()cy.clearCookies() en cy.screenshot() commando's
taskTimeout60000Time-out, in milliseconden, voor de voltooiing voor de uitvoering van cy.task() commando
execTimeout60000Deze keer in milliseconden is wachten om de uitvoering van de . te voltooien cy.exec() commando,
wat de voltooiing is van het systeemcommando
pageLoadTimeout60000Deze time-out wacht op page navigation events of opdrachten die op elkaar inwerken
met de pagina's zoals cy.visit()cy.go()cy.reload()

Cypress Lees JSON-bestand

Soms moeten we communiceren met de mappen of bestanden in ons project. Om te communiceren, moeten we bepaalde opties instellen in onze cypress.json bestand om de bestanden te manipuleren. Laten we dus eerst eens kijken naar de beschikbare opties in onze configuratie voor mappen/bestanden.

KeuzeStandaardOmschrijving
downloadsFoldercypress/downloadsDit is het pad waar de bestanden worden gedownload en opgeslagen tijdens een testrun
fixturesFoldercypress/fixturesDit is het pad naar de map die de fixture-bestanden bevat. We kunnen passeren false om het opslaan van de bestanden uit te schakelen.
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/integrationIntegratietestbestanden worden in dit pad naar de map opgeslagen.
pluginsFilecypress/plugins/index.jsDit pad is waar de plug-ins worden opgeslagen. U kunt het argument als false doorgeven om deze configuratie uit te schakelen.
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**/*.*Pad naar de testbestanden die moeten worden geladen. Het is een string of een array van globale patronen.
videosFoldercypress/videosMappad waarin video's worden opgeslagen tijdens het uitvoeren van de test

Schermafbeeldingen en video-opties

We kunnen onze snapshots en video's configureren in ons bestand cypress.json() en Cypress biedt ons enkele opties om onze configuratie aan te passen.

KeuzeStandaardOmschrijving
screenshotOnRunFailuretrueOptie om in te stellen op waar of onwaar of Cypress een screenshot maakt tijdens het mislukken van de test wanneer Cypress wordt uitgevoerd. Het is ingesteld op true bij verstek
trashAssetsBeforeRunstrueDeze optie is om activa te verwijderen in de videosFolder, downloadsFolder en screenshotsFolder voor elke cypress run
videoCompression32Deze optie is de kwaliteit van de videocompressie gemeten in de Constant Rate Factor (CRF). door te passeren false, kunt u deze optie ook uitschakelen. U kunt waarden doorgeven van 0 tot 51, waarbij de laagste waarde een betere kwaliteit geeft.
videosFoldercypress/videosDe map waarin de video van de tests wordt opgeslagen.
videotrueBooleaanse waarde om de video van de testuitvoering mee vast te leggen cypress run.
videoUploadOnPassestrueDeze optie is om de video's naar het Dashboard te uploaden wanneer alle testgevallen in een specificatiebestand zijn geslaagd.

Viewport en actiemogelijkheden

U kunt waarden configureren en doorgeven om de hoogte en breedte van de viewport te wijzigen met de opties van Cypress. Actiemogelijkheden kunnen ook worden geconfigureerd.

KeuzeStandaardOmschrijving
viewportHeight660Dit is om de standaardhoogte voor de toepassing in pixels te geven. We kunnen dit commando overschrijven met cy.viewport()
viewportWidth1000Optie voor de viewport-breedte in pixels voor de applicatie. Kan worden overschreven met cy.viewport() opdracht.
animationDistanceThreshold5De drempelwaarde voor de afstand gemeten in pixels waar een element moet overschrijden gezien de tijd voor het animeren.
waitForAnimationstrueOptie om te wachten tot de elementen de animatie hebben voltooid voordat er opdrachten worden uitgevoerd.
scrollBehaviortopDit is een viewport-optie die naar een element moet scrollen net voordat een commando wordt uitgevoerd. Beschikbare opties zijn: 'center''top''bottom''nearest'of false, Waarbij false schakelt het scrollen uit.

Cypress JSON-voorbeeld

Eerder zagen we de verschillende configuraties die we kunnen doorgeven in onze cypress.json het dossier. Nu zullen we een voorbeeld bekijken van hoe we ze in ons project kunnen gebruiken.

Standaardwaarden in het bestand cypress.json overschrijven

Open in onze VS-code de cypress.json het dossier. We zullen de . overschrijven defaultCommandTimeout commando om 8000.

{
    "defaultCommandTimeout" : 8000
}

Zo ziet het eruit in ons VS-codeproject.

standaardtime-out
cypress.json-bestand

Door het veranderen van de cypress.json bestand, het is van toepassing op het hele raamwerk. We kunnen dit verifiëren door naar onze Cypress-instellingen te gaan. Het is veranderd van een standaardwaarde van 4000 naar 8000

instellingen cipres
Cypress instellingen standaardwaarden

Standaardwaarden overschrijven via het testscript

We kunnen de standaardwaarden ook manipuleren via ons testscript. In plaats van in de cypress.json bestand, zullen we het doorgeven in ons testbestand.


//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()

Op deze manier kunnen we de standaardwaarden in ons testbestand overschrijven. Dit heeft echter geen invloed op eventuele configuratiewijzigingen op framework-niveau. Cypress geeft prioriteit aan de waarden in cypress.json. Ten slotte neemt het de globale configuraties over.

Cypress Armatuur JSON-array

Cipres cy.fixture() is een functie die een vaste set gegevens in een bestand laadt. We kunnen de fixture gebruiken als een JSON om waarden of arrays in het JSON-bestand te laden. Laten we eerst eens kijken hoe we toegang kunnen krijgen tot het JSON-bestand in ons project.

Mijn JSON-bestand heeft twee eigenschappen: gebruikersnaam en wachtwoord. Mijn JSON-bestandsnaam is examples.json.

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

In ons specificatiebestand zullen we toegang krijgen tot onze armatuur met de opdracht cy.fixture() en het concept van aliassen.

 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)
          }       

Cypress env JSON

Omgevingsvariabelen worden in veel projecten in organisaties gebruikt. We gebruiken omgevingsvariabelen

  • wanneer waarden dynamisch zijn op verschillende machines
  • wanneer we willen testen onder verschillende omgevingen zoals enscenering, testen, ontwikkeling, productie/live

In deze gevallen moeten we omgevingsvariabelen definiëren. Als we echter een env-variabele in één spec-bestand instellen, wordt dit niet weerspiegeld in andere spec-bestanden. Dit komt omdat Cypress elk spec-bestand onafhankelijk uitvoert. Op deze manier moeten we env-variabelen afzonderlijk configureren.

We hebben toegang tot onze omgevingsbestanden vanuit ons Cypress JSON-bestand, dat wil zeggen, cypress.json het dossier. We zullen dus verplicht zijn om de optie toe te wijzen in onze cypress.json bestand en gebruikt het in ons spec-bestand. Laten we dus in ons voorbeeld duiken.

We kunnen onze omgevingsvariabelen instellen in ons configuratiebestand of cypress.env.json bestand.

Omgevingsvariabele instellen in bestand cypress.json

We stellen de env-eigenschap in met een sleutel-waardepaar. Alle waarden doorgegeven onder het trefwoord env vallen onder omgevingsvariabelen, en Cypress neemt het argument van de env trefwoord. De syntaxis ziet er als volgt uit.

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

Als we toegang willen tot de env variabele in ons specificatiebestand, wijzen we ze toe zoals hieronder vermeld.

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

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

We zullen de . toevoegen env configuratie in ons project en zal ze openen in ons specificatiebestand. In onze cypress.json bestand, voeg dan de volgende configuratie toe. We zetten onze URL eigendom en deze toe te wijzen aan onze URL. Hier, URL is de sleutel, en https://techiescience.com/technology/ is de waarde.

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

Omdat we de configuratie hebben gedeclareerd, zullen we ze openen in ons specificatiebestand. Het ziet er ongeveer uit als hieronder. Zoals hierboven vermeld, zullen we gebruiken Cypress.env() methode om toegang te krijgen tot de env-variabele.

// 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'));

    })
})

Omgevingsvariabele instellen in bestand cypress.env.json

We kunnen onze omgevingsvariabele toewijzen in ons cipres env JSON-bestand. Daarvoor moeten we een nieuw bestand maken met de naam cypress.env.json aan de basis van het project. We zullen de niet nodig hebben env trefwoord; in plaats daarvan hebben we er rechtstreeks toegang toe door het sleutel-waardepaar door te geven.

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

Laten we eens kijken hoe we ze kunnen toewijzen in onze cypress.env.json bestand.

{
    "url" : "https://techiescience.com/",
    "urlTechnology" : "https://techiescience.com/technology/"
}
url cipres
Aanmaken van cypress.env.json-bestand

Zoals je hierboven ziet, hebben we een nieuw bestand gemaakt, cypress.env.json, en onze . toegevoegd URL eigenschappen. De manier om toegang te krijgen tot de omgevingsvariabelen zou dezelfde zijn als hierboven vermeld in de vorige sectie.

Cypress JSON-reporter

Zoals we weten, is Cypress bovenop Mocha gebouwd; alle verslaggevers die voor Mocha zijn gebouwd, kunnen worden gebruikt. We kunnen de reporter in ons JSON-bestand globaal configureren in onze cypress.json bestand.

reporterspecHier kunt u de reporter specificeren die moet worden gegenereerd tijdens de Cypress-run. Het is ingesteld op spec als de standaard verslaggever.
reporterOptionsnullDit is om de ondersteunde opties voor de melder te specificeren.

De hierboven genoemde opties zijn de configuraties die standaard in reporter zijn ingesteld. tevens de spec reporter is standaard ingesteld. In de reporter kunnen we dus elke reporter instellen die compatibel is met Mocha. reporterOptions is om de ondersteunde opties op te geven, afhankelijk van de reporter die we configureren.

Laten we eens kijken hoe we de reporter kunnen configureren in onze cypress.json bestand.

Laten we de multi-reporter mochawesome als onze reporter beschouwen. We zullen eerst de reporter installeren en toevoegen aan onze cypress.json bestand.

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

Installeer de reporter door de bovenstaande opdracht in de opdrachtregel door te geven. Nu, in onze cypress.json bestand, voeg dan de volgende eigenschap toe.

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

We zullen elk van de eigenschappen in detail begrijpen.

verslaggever: De naam van de reporter die we in ons project configureren

rapportDir: De map waar we onze resultaten gaan uitvoeren.

beschrijven: Deze vlag vraagt ​​om het overschrijven van de vorige rapporten.

html: genereert het rapport over de voltooiing van de test.

json: of een JSON-bestand moet worden gegenereerd bij het voltooien van de test.

cypress.json-bestand
Cypress-reporter in het cipres JSON-bestand

Cypress pakket-lock.json

De pakket-lock.json bestand wordt automatisch gemaakt voor alle bewerkingen wanneer npm de knooppuntmodules of het bestand package.json wijzigt. Wanneer we opties toevoegen of installeer nieuwe afhankelijkheden van onze Cypress package JSON-bestand, dan wordt Cypress package-lock.json automatisch bijgewerkt.

Cypess-pakket.vergrendeling JSON bestand traceert elk pakket en zijn versie, zodat de installaties worden onderhouden en bijgewerkt bij elke npm-installatie wereldwijd. Dus in ons Cypress-pakket JSON-bestand, wanneer we de versie bijwerken of een afhankelijkheid toevoegen, wordt package-lock.json ook bijgewerkt en we willen er geen wijzigingen in aanbrengen.

pakketvergrendeling json cipres
Cypress package-lock.json-bestand