Nous discuterons de la structure JSON, des exemples et de l'expérience pratique détaillée pour écrire JSON dans notre code. Mais, tout d'abord, plongeons-nous dans notre article !
Qu'est-ce que Cypress Json : exemple, schéma, analyse pratique détaillée
Dans notre précédent article, nous avons discuté des variables et des alias et de la façon d'écrire notre premier cas de test. Maintenant, nous allons discuter de Cypress JSON et de la façon de l'intégrer dans notre code.
Table des matières
- Fichier JSON Cypress
- Options JSON par défaut
- Options globales
- Délai d'expiration JSON de Cypress
- Cypress Lire le fichier JSON
- Options de capture d'écran et de vidéo
- Fenêtre et actionnabilité
- Exemple de Cypress JSON
- Tableau JSON Cypress Fixture
- Cyprès env JSON
- Cyprès JSON Reporter
- Cypress package-lock.json
Fichier JSON Cypress
Comme nous l'avons vu précédemment, la première fois que nous ouvrons notre Cypress Test Runner, cela crée un cyprès.json fichier. Ce fichier est utilisé pour transmettre toutes les valeurs de configuration dont nous avons besoin. Alors d'abord, nous examinerons les options que nous pouvons passer dans notre cypress.json
fichier.
Options JSON par défaut
Certaines options sont définies par défaut dans Cypress. Cependant, nous pouvons les personnaliser en fonction de notre projet. Pour identifier les valeurs par défaut définies par Cypress, accédez au Paramètres dossier dans notre Cypress Test Runner. À partir de là, développez l'option Configuration pour afficher les options par défaut définies par Cypress.
Les options sont les configurations par défaut fournies par 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
}
Options
Nous pouvons modifier les options par défaut de Cypress en passant tous les arguments compatibles avec notre projet. Comme son nom l'indique, cypress.json est un fichier JSON, nous devons donc passer nos arguments au format JSON. Dans notre code VS, vous pouvez voir que le cypress.json est vide sans aucun argument qui lui est transmis. Voyons maintenant les différentes options que nous pouvons passer dans notre fichier JSON.
Options globales
Nous pouvons passer les options globales aux arguments qui doivent être accessibles globalement. Par exemple, dans le tableau ci-dessous, la colonne Options représente le mot-clé que nous allons passer dans notre fichier JSON ; Default indique la valeur par défaut de l'option particulière définie par Cypress, et Description indique la signification de l'option.
Option | Réglage par défaut | Description |
---|---|---|
baseUrl | null | Nous pouvons définir l'URL globalement au lieu de transmettre chaque fichier. Il peut être utilisé pour cy.visit() or cy.request() commandes |
clientCertificates | [] | Vous pouvez utiliser cette option pour configurer les certificats clients sur une base URL |
env | {} | Vous pouvez transmettre n'importe quelle variable d'environnement en tant que valeur. Cette option sera utile si nous testons notre application dans différents environnements comme la mise en scène ou la production. |
watchForFileChanges | true | Cette option vérifie si Cypress surveille et redémarre les tests sur les modifications de fichier. |
port | null | Nous pouvons passer le numéro de port sur l'hébergement Cypress. Un port aléatoire est généré, mais nous pouvons ajouter le numéro de port dont nous avons besoin. |
numTestsKeptInMemory | 50 | Cette option correspond au nombre d'instantanés de test et de données de commandes stockées en mémoire. S'il y a une consommation de mémoire élevée dans le navigateur lors d'un test, nous pouvons réduire le nombre. |
retries | { "runMode": 0, "openMode": 0 } | Cette option permet de spécifier le nombre de fois où réessayer un test qui échoue. Nous pouvons le configurer séparément pour course de cyprès et cyprès ouvert. |
redirectionLimit | 20 | Nous pouvons configurer la limite du nombre de fois que l'application peut être redirigée avant qu'une erreur ne se produise. |
includeShadowDom | false | La possibilité de naviguer à l'intérieur du Shadow DOM pour interagir avec les éléments. Par défaut, il est défini sur false. Si notre application a un élément nécessitant une navigation racine fantôme, vous pouvez le définir sur true . |
Délai d'expiration JSON de Cypress
Le délai d'attente est l'un des concepts les plus importants de tout cadre d'automatisation. Cypress fournit une variété d'options qui aident à gérer les délais d'attente dans nos scripts. Tout d'abord, nous examinerons les options que nous pouvons configurer.
Option | Réglage par défaut | Description |
---|---|---|
defaultCommandTimeout | 4000 | Cette option attend le chargement des commandes basées sur les éléments DOM. C'est en millisecondes. |
requestTimeout | 5000 | Temps, en millisecondes, d'attente jusqu'à ce que la requête de la commande cy.wait() expire. |
responseTimeout | 30000 | Ce délai d'attente est d'attendre une réponse dans une série de commandes telles que cy.request() , cy.wait() , cy.fixture() , cy.getCookie() , cy.getCookies() , cy.setCookie() , cy.clearCookie() , cy.clearCookies() et cy.screenshot() commandes |
taskTimeout | 60000 | Timeout, en millisecondes, pour l'achèvement de l'exécution de cy.task() commander |
execTimeout | 60000 | Ce temps en millisecondes est d'attendre la fin de l'exécution du cy.exec() commander,qui est l'achèvement de la commande système |
pageLoadTimeout | 60000 | Ce délai d'attente attend page navigation events ou des commandes qui interagissentavec les pages comme cy.visit() , cy.go() , cy.reload() |
Cypress Lire le fichier JSON
Parfois, nous aurons besoin d'interagir avec les dossiers ou les fichiers de notre projet. Pour interagir, nous devons définir certaines options dans notre cypress.json
fichier pour manipuler les fichiers. Alors, tout d'abord, examinons les options disponibles dans notre configuration de dossiers/fichiers.
Option | Réglage par défaut | Description |
---|---|---|
downloadsFolder | cypress/downloads | Il s'agit du chemin où les fichiers sont téléchargés et stockés lors d'un test |
fixturesFolder | cypress/fixtures | Il s'agit du chemin d'accès au dossier qui contient les fichiers des appareils. Nous pouvons passer false pour désactiver le stockage des fichiers. |
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. | ||
integrationFolder | cypress/integration | Les fichiers de test d'intégration sont stockés dans ce chemin d'accès au dossier. |
pluginsFile | cypress/plugins/index.js | Ce chemin est l'endroit où les plugins sont stockés. Vous pouvez passer l'argument comme false pour désactiver cette configuration. |
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 | ||
testFiles | **/*.* | Chemin d'accès aux fichiers de test qui doivent être chargés. Il s'agit soit d'une chaîne, soit d'un tableau de modèles globaux. |
videosFolder | cypress/videos | Chemin du dossier qui stockera les vidéos pendant l'exécution du test |
Captures d'écran et options vidéo
Nous pouvons configurer nos instantanés et vidéos dans notre fichier cypress.json(), et Cypress nous fournit quelques options pour personnaliser notre configuration.
Option | Réglage par défaut | Description |
---|---|---|
screenshotOnRunFailure | true | Option pour définir sur vrai ou faux si Cypress prend une capture d'écran lors de l'échec du test lorsque Cypress s'exécute. Il est réglé sur true par défaut |
trashAssetsBeforeRuns | true | Cette option consiste à supprimer les actifs dans le videosFolder , downloadsFolder et screenshotsFolder avant chaque cypress run |
videoCompression | 32 | Cette option est la qualité de la compression vidéo mesurée dans le Constant Rate Factor (CRF). En passant false , vous pouvez également désactiver cette option. Vous pouvez passer des valeurs de 0 à 51, où la valeur la plus basse donne une meilleure qualité. |
videosFolder | cypress/videos | Le dossier dans lequel la vidéo des tests est enregistrée. |
video | true | Valeur booléenne pour capturer la vidéo de l'exécution du test avec cypress run . |
videoUploadOnPasses | true | Cette option consiste à télécharger les vidéos sur le tableau de bord lorsque tous les cas de test d'un fichier de spécifications sont réussis. |
Fenêtre et actionnabilité
Vous pouvez configurer et transmettre des valeurs pour modifier la hauteur et la largeur de la fenêtre avec les options fournies par Cypress. Les options d'action peuvent également être configurées.
Option | Réglage par défaut | Description |
---|---|---|
viewportHeight | 660 | Il s'agit de fournir la hauteur par défaut de l'application en pixels. Nous pouvons remplacer cette commande avec cy.viewport() |
viewportWidth | 1000 | Option pour la largeur de la fenêtre en pixels pour l'application. Peut être remplacé avec cy.viewport() commander. |
animationDistanceThreshold | 5 | La valeur seuil de la distance mesurée en pixels où un élément doit dépasser compte tenu du temps d'animation. |
waitForAnimations | true | Option d'attendre que les éléments terminent l'animation avant d'exécuter des commandes. |
scrollBehavior | top | Il s'agit d'une option de fenêtre qui doit faire défiler jusqu'à un élément juste avant d'exécuter des commandes. Les options disponibles sont 'center' , 'top' , 'bottom' , 'nearest' ou false , Dans lequel false désactive le défilement. |
Exemple de Cypress JSON
Tout à l'heure, nous avons vu les différentes configurations que nous pouvons passer dans notre cypress.json
fichier. Maintenant, nous allons examiner un exemple de la façon de les utiliser dans notre projet.
Remplacement des valeurs par défaut dans le fichier cypress.json
Dans notre code VS, ouvrez le cypress.json
fichier. Nous remplacerons le defaultCommandTimeout
commande à 8000
.
{
"defaultCommandTimeout" : 8000
}
Voici à quoi cela ressemble dans notre projet de code VS.
En changeant le cypress.json
fichier, il s'applique à l'ensemble du cadre. Nous pouvons vérifier en accédant à nos paramètres Cypress. Il est passé d'une valeur par défaut de 4000
à 8000
Remplacement des valeurs par défaut via le script de test
Nous pouvons également manipuler les valeurs par défaut via notre script de test. Au lieu de passer dans le cypress.json
fichier, nous le passerons dans notre fichier de test.
//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()
De cette façon, nous pouvons remplacer les valeurs par défaut dans notre fichier de test. Cependant, cela n'a aucun impact sur les modifications de configuration au niveau du framework. Cypress privilégie les valeurs en cypress.json
. Enfin, il reprend les configurations globales.
Tableau JSON Cypress Fixture
Cyprès cy.fixture()
est une fonction qui charge un ensemble fixe de données dans un fichier. Nous pouvons utiliser l'appareil en tant que JSON pour charger n'importe quelle valeur ou tableau dans le fichier JSON. Tout d'abord, comprenons comment accéder au fichier JSON dans notre projet.
Mon fichier JSON a deux propriétés : nom d'utilisateur et mot de passe. Mon nom de fichier JSON est examples.json
.
{
"email": "[email protected]",
"password" : test123
}
Dans notre fichier spec, nous accéderons à notre fixture avec la commande cy.fixture() et le concept de alias.
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)
}
Cyprès env JSON
Les variables d'environnement sont utilisées dans de nombreux projets dans les organisations. Nous utilisons des variables d'environnement
- lorsque les valeurs sont dynamiques sur différentes machines
- lorsque nous voulons tester sous différents environnements tels que la mise en scène, les tests, le développement, la production/live
Ces cas nous obligent à définir des variables d'environnement. Cependant, si nous définissons une variable env dans un fichier de spécification, elle n'est pas reflétée dans les autres fichiers de spécification. C'est parce que Cypress exécute chaque fichier de spécifications indépendamment. De cette façon, nous devrons configurer les variables env séparément.
Nous accédons à nos fichiers d'environnement à partir de notre fichier Cypress JSON, c'est-à-dire, cypress.json
fichier. Nous devrons donc attribuer l'option dans notre cypress.json
fichier et l'a utilisé dans notre fichier de spécifications. Alors plongeons-nous dans notre exemple.
Nous pouvons définir nos variables d'environnement dans notre fichier de configuration ou cypress.env.json
fichier.
Définition de la variable d'environnement dans le fichier cypress.json
Nous définissons la propriété env par une paire clé-valeur. Toutes les valeurs passées sous le mot-clé env
relèvent des variables d'environnement, et Cypress prend l'argument de la env
mot-clé. La syntaxe ressemble à celle ci-dessous.
{
"env": {
"key1": "value1",
"key2": "value2"
}
}
Si nous voulons accéder au env
variable dans notre fichier de spécifications, nous les attribuons comme mentionné ci-dessous.
Cypress.env() //returns both the key1,value1 and key2, value2
Cypress.env(key1) //returns only the value1
Nous ajouterons le env
configuration dans notre projet et y accédera dans notre fichier de spécifications. Dans notre cypress.json
fichier, ajoutez la configuration suivante. Nous fixons notre URL
propriété et en les affectant à notre URL. Ici, URL
est la clé, et https://techiescience.com/technology/
est la valeur.
{
"env" : {
"url" : "https://techiescience.com/technology/"
}
}
Comme nous avons déclaré la configuration, nous y accéderons dans notre fichier de spécifications. Cela ressemble à quelque chose comme ci-dessous. Comme mentionné ci-dessus, nous utiliserons Cypress.env()
méthode pour accéder à la variable 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'));
})
})
Définition de la variable d'environnement dans le fichier cypress.env.json
Nous pouvons affecter notre variable d'environnement dans notre fichier JSON cypress env. Pour cela, nous devons créer un nouveau fichier appelé cypress.env.json
à la racine du projet. Nous n'exigerons pas le env
mot-clé; à la place, nous pouvons y accéder directement en passant la paire clé-valeur.
{
"key1": "value1",
"key2": "value2"
}
Voyons comment les affecter dans notre cypress.env.json
fichier.
{
"url" : "https://techiescience.com/",
"urlTechnology" : "https://techiescience.com/technology/"
}
Comme vous le voyez ci-dessus, nous avons créé un nouveau fichier, cypress.env.json
, et a ajouté notre URL
Propriétés. La manière d'accéder aux variables d'environnement serait la même que celle mentionnée ci-dessus dans la section précédente.
Cyprès JSON Reporter
Comme nous le savons, Cypress est construit sur Moka; tous les reporters conçus pour Mocha peuvent être utilisés. Nous pouvons configurer le reporter dans notre fichier JSON globalement dans notre cypress.json
fichier.
reporter | spec | Ici, vous pouvez spécifier le rapporteur qui doit être généré lors de l'exécution de Cypress. Il est réglé sur spec comme rapporteur par défaut. |
reporterOptions | null | Il s'agit de spécifier les options prises en charge pour le rapporteur. |
Les options mentionnées ci-dessus sont les configurations définies dans reporter par défaut. De plus, le spec
reporter est défini par défaut. Ainsi, dans le reporter, nous pouvons définir n'importe quel reporter compatible avec Mocha. reporterOptions
consiste à spécifier les options prises en charge en fonction du rapporteur que nous configurons.
Voyons comment configurer le reporter dans notre cypress.json
fichier.
Considérons le multi reporter mochawesome comme notre reporter. Nous allons d'abord installer le reporter et l'ajouter à notre cypress.json
fichier.
npm install --save-dev mocha cypress-multi-reporters mochawesome
Installez le reporter en passant la commande ci-dessus dans la ligne de commande. Maintenant, dans notre cypress.json
fichier, ajoutez la propriété suivante.
"reporter": "cypress-multi-reporters",
"reporterOptions": {
"reportDir": "cypress/reports/multireports",
"overwrite": false,
"html": false,
"json": true
}
Nous allons comprendre chacune des propriétés en détail.
journaliste: Le nom du rapporteur que nous configurons dans notre projet
rapportDir: Le répertoire dans lequel nous allons sortir nos résultats.
écraser: Ce drapeau demande l'écrasement des rapports précédents.
html: Génère le rapport à la fin du test.
json: s'il faut générer un fichier JSON à la fin du test.
Cypress package-lock.json
La package-lock.json Le fichier est créé automatiquement pour toutes les opérations lorsque npm modifie les modules de nœud ou le fichier package.json. Lorsque nous ajoutons des options ou installer toutes les nouvelles dépendances à notre Cypress package JSON, puis Cypress package-lock.json est mis à jour automatiquement.
Paquet Cypess.lock JSON fichier trace chaque package et sa version afin que les installations soient maintenues et mises à jour à chaque installation npm dans le monde. Ainsi, dans notre fichier JSON de package Cypress, lorsque nous mettons à jour la version ou ajoutons une dépendance, package-lock.json est également mis à jour et nous ne souhaitons y apporter aucune modification.
Salut… Je m'appelle Aishwarya Lakshmi, j'ai terminé mon B.Tech et j'ai près de 2 ans d'expérience dans le domaine des tests. Je suis un passionné de tests et passionné par les tests et j'aime explorer de nouvelles choses dans mon domaine et les partager avec mes pairs. J'aime écrire des blogs pendant mon temps libre de la manière la plus simple mais efficace. En tant que testeur, j'aime avoir les choses à la perfection, je souhaite donc à mes lecteurs d'avoir une parfaite compréhension de la technologie. Je me tiens au courant des nouvelles technologies liées aux tests et passe du temps à les comprendre. Je suis heureux d'aider les étudiants à comprendre les concepts des tests.