PÔhjalik juhend Cypressi kohta, mis on vÔimas otsast-lÔpuni testimise raamistik, hÔlmates paigaldamist, testide kirjutamist, silumist, CI/CD integreerimist ja parimaid praktikaid.
Cypress: Ălim Veebirakenduste Otsast-lĂ”puni Testimise Juhend
TĂ€napĂ€eva kiiresti arenevas veebiarendusmaailmas on veebirakenduste kvaliteedi ja usaldusvÀÀrsuse tagamine ĂŒlimalt tĂ€htis. Otsast-lĂ”puni (E2E) testimine mĂ€ngib olulist rolli selle kontrollimisel, et kĂ”ik rakenduse komponendid töötavad kasutaja vaatenurgast sujuvalt koos. Cypress on kujunenud juhtivaks E2E testimise raamistikuks, pakkudes arendajasĂ”bralikku kogemust, vĂ”imsaid funktsioone ja suurepĂ€rast jĂ”udlust. See pĂ”hjalik juhend juhatab teid lĂ€bi kĂ”ige, mida peate teadma, et Cypressiga alustada ja oma veebirakendusi tĂ”husalt testida.
Mis on Cypress?
Cypress on jĂ€rgmise pĂ”lvkonna esiotsa testimise tööriist, mis on loodud kaasaegse veebi jaoks. Erinevalt traditsioonilistest testimisraamistikest, mis kĂ€itavad teste brauseris, töötab Cypress otse brauseris, andes teile enneolematu kontrolli ja nĂ€htavuse oma rakenduse kĂ€itumise ĂŒle. See on loodud olema kiire, usaldusvÀÀrne ja lihtne kasutada, muutes selle populaarseks valikuks arendajate ja QA inseneride seas ĂŒle maailma. Cypress on kirjutatud JavaScriptis ja kĂ€ivitatakse brauseris, muutes selle vĂ€ga jĂ”udlaks ja pakkudes enneolematut juurdepÀÀsu rakenduse sisemusele.
Cypressi Kasutamise Peamised Eelised
- ArendajasÔbralik: Cypress pakub puhast ja intuitiivset API-t, mis muudab testide kirjutamise ja silumise lihtsaks.
- Ajas RÀndamine: Cypress teeb hetkepilte teie rakenduse olekust iga testikÀsu ajal, vÔimaldades teil ajas tagasi astuda ja nÀha tÀpselt, mis igal ajahetkel juhtus.
- Reaalajas Uuesti Laadimine: Cypress laadib automaatselt uuesti, kui teete oma testides muudatusi, pakkudes kohest tagasisidet.
- Automaatne Ootamine: Cypress ootab automaatselt, kuni elemendid muutuvad nÀhtavaks vÔi interaktiivseks, enne kui tegevusi sooritab, kÔrvaldades vajaduse selgesÔnaliste ootamiste jÀrele.
- VÔrgu Kontroll: Cypress vÔimaldab teil vÔrgupÀringuid ja -vastuseid jÀrele aimata, vÔimaldades teil simuleerida erinevaid stsenaariume ja testida oma rakenduse veakÀsitlust.
- Silutavus: Cypress pakub suurepĂ€raseid silumistööriistu, sealhulgas vĂ”imast silurit ja ĂŒksikasjalikke veateateid.
- Ristbrauseri Testimine: Cypress toetab mitut brauserit, sealhulgas Chrome, Firefox, Edge ja Electron.
- Peata Testimine: KĂ€ivitage teste peata reĆŸiimis, et kiirendada tĂ€itmist CI/CD keskkondades.
- Sisseehitatud VÀited: Cypress pakub rikkalikku komplekti sisseehitatud vÀiteid, et kontrollida oma rakenduse eeldatavat kÀitumist.
Paigaldamine ja Seadistamine
Cypressiga alustamine on lihtne. Siin on, kuidas seda installida:
- Eeltingimused: Veenduge, et teie sĂŒsteemi on installitud Node.js ja npm (Node Package Manager). Saate need alla laadida ametlikult Node.js veebisaidilt.
- Installige Cypress: Avage oma terminal vÔi kÀsuviip, navigeerige oma projektikataloogi ja kÀivitage jÀrgmine kÀsk:
- Avage Cypress: Kui installimine on lÔppenud, saate avada Cypressi Test Runneri, kÀivitades:
npm install cypress --save-dev
npx cypress open
See kÀsk kÀivitab Cypress Test Runneri, mis pakub graafilist liidest teie testide kÀivitamiseks ja silumiseks.
Oma Esimese Cypressi Testi Kirjutamine
Loome lihtsa testi, et kontrollida, kas veebisaidi avaleht laaditakse Ôigesti. Looge uus fail nimega `example.cy.js` oma projekti kataloogis `cypress/e2e`.
// cypress/e2e/example.cy.js
describe('Minu Esimene Test', () => {
it('KĂŒlastab Köögivalamut', () => {
cy.visit('https://example.cypress.io')
cy.contains('type').click()
cy.url().should('include', '/commands/actions')
cy.get('.action-email')
.type('fake@email.com')
.should('have.value', 'fake@email.com')
})
})
VÔtame selle testi lahti:
- `describe()`: MÀÀrab testikomplekti, mis on seotud testide kogum.
- `it()`: MÀÀrab testikomplektis ĂŒksiku testijuhtumi.
- `cy.visit()`: Navigeerib mÀÀratud URL-ile.
- `cy.contains()`: Leiab elemendi, mis sisaldab mÀÀratud teksti.
- `.click()`: KlÔpsab valitud elemendil.
- `cy.url()`: Hangib lehe praeguse URL-i.
- `.should()`: Esitab vÀite rakenduse oleku kohta.
- `cy.get()`: Valib elemendi CSS-selektori abil.
- `.type()`: Sisestab teksti valitud elementi.
- `.should('have.value', 'fake@email.com')`: VÀidab, et elemendi vÀÀrtus on vÔrdne vÀÀrtusega 'fake@email.com'.
KÀivitage see test Cypress Test Runneris, et seda tegevuses nÀha. Peaksite nÀgema, et brauser navigeerib Cypressi Köögivalamu veebisaidile, klÔpsab lingil "type" ja kontrollib URL-i.
Cypressi KĂ€sud
Cypress pakub laia valikut kÀske teie rakendusega suhtlemiseks. Siin on mÔned kÔige sagedamini kasutatavad kÀsud:
- `cy.visit(url)`: Navigeerib mÀÀratud URL-ile.
- `cy.get(selector)`: Valib elemendi CSS-selektori abil.
- `cy.contains(content)`: Valib elemendi, mis sisaldab mÀÀratud teksti.
- `cy.click()`: KlÔpsab valitud elemendil.
- `cy.type(text)`: Sisestab teksti valitud elementi.
- `cy.clear()`: TĂŒhjendab sisend- vĂ”i tekstiala elemendi sisu.
- `cy.submit()`: Esitab vormi.
- `cy.check()`: MÀrgistab mÀrkeruudu vÔi raadionupu.
- `cy.uncheck()`: Eemaldab mÀrkeruudu mÀrgistuse.
- `cy.select(value)`: Valib rippmenĂŒĂŒst valiku.
- `cy.scrollTo(position)`: Kerib lehte mÀÀratud positsioonile.
- `cy.trigger(event)`: KĂ€ivitab valitud elemendil DOM-i sĂŒndmuse.
- `cy.request(url, options)`: Teeb HTTP pÀringu mÀÀratud URL-ile.
- `cy.intercept(route, handler)`: Pealtkuulab HTTP pÀringuid, mis vastavad mÀÀratud marsruudile.
- `cy.wait(time)`: Ootab mÀÀratud aja.
- `cy.reload()`: Laadib praeguse lehe uuesti.
- `cy.go(direction)`: Navigeerib brauseri ajaloos eelmisele vÔi jÀrgmisele lehele.
- `cy.url()`: Hangib lehe praeguse URL-i.
- `cy.title()`: Hangib lehe pealkirja.
- `cy.window()`: Hangib akna objekti.
- `cy.document()`: Hangib dokumendi objekti.
- `cy.viewport(width, height)`: MÀÀrab vaateala suuruse.
Need on vaid mÔned paljudest Cypressis saadaolevatest kÀskudest. TÀieliku kÀskude loendi ja nende valikute saamiseks vaadake Cypressi dokumentatsiooni.
VĂ€ited Cypressis
VÀiteid kasutatakse teie rakenduse eeldatava kÀitumise kontrollimiseks. Cypress pakub rikkalikku komplekti sisseehitatud vÀiteid, mida saate kasutada elementide oleku, URL-i, pealkirja ja muu kontrollimiseks. VÀited aheldatakse pÀrast Cypressi kÀske, kasutades meetodit `.should()`.
Siin on mÔned levinud vÀidete nÀited:
- `.should('be.visible')`: VÀidab, et element on nÀhtav.
- `.should('not.be.visible')`: VÀidab, et element ei ole nÀhtav.
- `.should('be.enabled')`: VĂ€idab, et element on lubatud.
- `.should('be.disabled')`: VĂ€idab, et element on keelatud.
- `.should('have.text', 'eeldatav tekst')`: VÀidab, et elemendil on mÀÀratud tekst.
- `.should('contain', 'eeldatav tekst')`: VÀidab, et element sisaldab mÀÀratud teksti.
- `.should('have.value', 'eeldatav vÀÀrtus')`: VÀidab, et elemendil on mÀÀratud vÀÀrtus.
- `.should('have.class', 'eeldatav klass')`: VÀidab, et elemendil on mÀÀratud klass.
- `.should('have.attr', 'atribuudi nimi', 'eeldatav vÀÀrtus')`: VÀidab, et elemendil on mÀÀratud atribuut ja vÀÀrtus.
- `.should('have.css', 'CSS omadus', 'eeldatav vÀÀrtus')`: VÀidab, et elemendil on mÀÀratud CSS omadus ja vÀÀrtus.
- `.should('have.length', eeldatav pikkus)`: VÀidab, et elemendil on mÀÀratud pikkus (nt elementide arv loendis).
VÔite luua ka kohandatud vÀiteid, mis vastavad teie konkreetsetele vajadustele.
Parimad Praktikad Cypressi Testide Kirjutamiseks
Parimate praktikate jÀrgimine aitab teil kirjutada paremini hooldatavaid, usaldusvÀÀrsemaid ja tÔhusamaid Cypressi teste. Siin on mÔned soovitused:
- Kirjutage Selgeid ja LĂŒhikesi Teste: Iga test peaks keskenduma konkreetsele funktsionaalsusele vĂ”i stsenaariumile. VĂ€ltige liiga keeruliste testide kirjutamist, mida on raske mĂ”ista ja hooldada.
- Kasutage Sisukaid Testinimed: Andke oma testidele kirjeldavad nimed, mis selgelt nÀitavad, mida nad testivad.
- VÀltige VÀÀrtuste Koodi Sissekirjutamist: Kasutage muutujaid vÔi konfiguratsioonifaile, et salvestada vÀÀrtusi, mis vÔivad aja jooksul muutuda.
- Kasutage Kohandatud KÀske: Looge kohandatud kÀske, et kapseldada korduvkasutatavat loogikat ja muuta oma testid loetavamaks.
- Isoleerige Testid: Iga test peaks olema teistest testidest sÔltumatu. VÀltige rakenduse olekule tuginemist eelmistest testidest.
- Puhastage PÀrast Teste: PÀrast iga testi lÀhtestage rakenduse olek, et tagada jÀrgnevate testide algamine puhtalt lehelt.
- Kasutage Andmeatribuute: Kasutage andmeatribuute (nt `data-testid`), et valida oma testides elemente. Andmeatribuudid muutuvad vÀhem tÔenÀoliselt kui CSS klassid vÔi ID-d, muutes teie testid UI muudatustele vastupidavamaks.
- VÀltige SelgesÔnalisi Ootamisi: Cypress ootab automaatselt, kuni elemendid muutuvad nÀhtavaks vÔi interaktiivseks. VÀltige selgesÔnaliste ootamiste (nt `cy.wait()`) kasutamist, vÀlja arvatud juhul, kui see on absoluutselt vajalik.
- Testige Kasutajavoogusid: Keskenduge kasutajavoogude testimisele, mitte ĂŒksikute komponentide testimisele. See aitab teil tagada, et teie rakendus töötab kasutaja vaatenurgast Ă”igesti.
- KĂ€ivitage Teste Regulaarselt: Integreerige Cypressi testid oma CI/CD torujuhtmesse ja kĂ€ivitage neid regulaarselt, et pĂŒĂŒda vead arendusprotsessi varases etapis kinni.
TĂ€iustatud Cypressi Tehnikad
JĂ€rele Aimatamine ja Mockimine
Cypress vÔimaldab teil vÔrgupÀringuid ja -vastuseid jÀrele aimata, vÔimaldades teil simuleerida erinevaid stsenaariume ja testida oma rakenduse veakÀsitlust. See on eriti kasulik funktsioonide testimiseks, mis tuginevad vÀlistele API-dele vÔi teenustele.
VÔrgupÀringu jÀrele aimamiseks saate kasutada kÀsku `cy.intercept()`. NÀiteks allolev kood jÀrele aimab GET pÀringut aadressile `/api/users` ja tagastab mock vastuse:
cy.intercept('GET', '/api/users', {
statusCode: 200,
body: [
{ id: 1, name: 'John Doe' },
{ id: 2, name: 'Jane Doe' }
]
}).as('getUsers')
SeejÀrel saate oodata pealtkuulatud pÀringut, kasutades `cy.wait('@getUsers')` ja kontrollida, kas teie rakendus kÀsitleb mock vastust Ôigesti.
Kohaliku Salvestusruumi ja KĂŒpsiste Kasutamine
Cypress pakub kĂ€ske kohaliku salvestusruumi ja kĂŒpsistega suhtlemiseks. Saate neid kĂ€ske kasutada kohaliku salvestusruumi ja kĂŒpsiste mÀÀramiseks, hankimiseks ja tĂŒhjendamiseks oma testides.
Kohaliku salvestusruumi ĂŒksuse mÀÀramiseks saate kasutada kĂ€sku `cy.window()`, et pÀÀseda juurde akna objektile, ja seejĂ€rel kasutada meetodit `localStorage.setItem()`. NĂ€iteks:
cy.window().then((win) => {
win.localStorage.setItem('myKey', 'myValue')
})
Kohaliku salvestusruumi ĂŒksuse hankimiseks saate kasutada kĂ€sku `cy.window()` ja seejĂ€rel kasutada meetodit `localStorage.getItem()`. NĂ€iteks:
cy.window().then((win) => {
const value = win.localStorage.getItem('myKey')
expect(value).to.equal('myValue')
})
KĂŒpsise mÀÀramiseks saate kasutada kĂ€sku `cy.setCookie()`. NĂ€iteks:
cy.setCookie('myCookie', 'myCookieValue')
KĂŒpsise hankimiseks saate kasutada kĂ€sku `cy.getCookie()`. NĂ€iteks:
cy.getCookie('myCookie').should('have.property', 'value', 'myCookieValue')
Failide Ăleslaadimise KĂ€sitsemine
Cypress pakub pluginat nimega `cypress-file-upload`, mis lihtsustab failide ĂŒleslaadimist teie testides. Plugina installimiseks kĂ€ivitage jĂ€rgmine kĂ€sk:
npm install -D cypress-file-upload
SeejÀrel lisage jÀrgmine rida oma faili `cypress/support/commands.js`:
import 'cypress-file-upload';
SeejĂ€rel saate kasutada kĂ€sku `cy.uploadFile()`, et fail ĂŒles laadida. NĂ€iteks:
cy.get('input[type="file"]').attachFile('example.txt')
IFrame'ide Kasutamine
IFrame'ide testimine vÔib olla keeruline, kuid Cypress pakub viisi nendega suhtlemiseks. Saate kasutada kÀsku `cy.frameLoaded()`, et oodata IFrame'i laadimist, ja seejÀrel kasutada kÀsku `cy.iframe()`, et hankida IFrame'i dokumendi objekt.
cy.frameLoaded('#myIframe')
cy.iframe('#myIframe').find('button').click()
Cypress ja Pidevintegratsioon/Pidevjuurutus (CI/CD)
Cypressi integreerimine oma CI/CD torujuhtmesse on oluline teie rakenduse kvaliteedi tagamiseks. Saate Cypressi teste kĂ€itada peata reĆŸiimis oma CI/CD keskkonnas. Siin on, kuidas:
- Installige Cypress: Veenduge, et Cypress on installitud teie projekti sÔltuvusena.
- Konfigureerige CI/CD: Konfigureerige oma CI/CD torujuhe Cypressi testide kÀivitamiseks pÀrast iga buildi.
- KĂ€ivitage Cypress Peata ReĆŸiimis: Kasutage kĂ€sku `cypress run`, et kĂ€ivitada Cypressi teste peata reĆŸiimis.
NĂ€ide CI/CD konfiguratsioonist (kasutades GitHub Actionseid):
name: Cypressi Testid
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
cypress-run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- name: Installi sÔltuvused
run: npm install
- name: Cypressi kÀivitamine
uses: cypress-io/github-action@v5
with:
start: npm start
wait-on: 'http://localhost:3000'
See konfiguratsioon kĂ€ivitab Cypressi testid alati, kui kood lĂŒkatakse `main` harusse vĂ”i kui `main` haru vastu luuakse pull taotlus. Action `cypress-io/github-action` lihtsustab Cypressi testide kĂ€ivitamise protsessi GitHub Actionseides.
Cypressi Testide Silumine
Cypress pakub suurepÀraseid silumistööriistu, mis aitavad teil oma testides probleeme tuvastada ja parandada. Siin on mÔned nÀpunÀited Cypressi testide silumiseks:
- Kasutage Cypressi Test Runnerit: Cypressi Test Runner pakub visuaalset liidest teie testide kĂ€ivitamiseks ja silumiseks. Saate oma testides kĂ€su kaupa edasi liikuda, kontrollida rakenduse olekut ja vaadata ĂŒksikasjalikke veateateid.
- Kasutage KÀsku `cy.pause()`: KÀsk `cy.pause()` peatab teie testi tÀitmise ja vÔimaldab teil brauseri arendajatööriistades rakenduse olekut kontrollida.
- Kasutage KÀsku `cy.debug()`: KÀsk `cy.debug()` prindib valitud elemendi konsooli, vÔimaldades teil selle omadusi ja atribuute kontrollida.
- Kasutage Brauseri Arendajatööriistu: Brauseri arendajatööriistad pakuvad hulgaliselt teavet teie rakenduse kohta, sealhulgas DOM, vÔrgupÀringud ja konsooli logid.
- Lugege Veateateid Hoolikalt: Cypress pakub ĂŒksikasjalikke veateateid, mis aitavad teil vea pĂ”hjust tuvastada. Pöörake tĂ€helepanu veateatele ja stack tracile.
Cypress vs. Muud Testimisraamistikud
Kuigi Cypress on vĂ”imas otsast-lĂ”puni testimise raamistik, on oluline mĂ”ista, kuidas see vĂ”rdleb teiste populaarsete valikutega. Siin on lĂŒhike ĂŒlevaade:
- Selenium: Selenium on laialdaselt kasutatav automatiseeritud testimise raamistik. Kuigi see on paindlik ja toetab mitut keelt, vÔib selle seadistamine ja hooldamine olla keeruline. Cypress pakub lihtsamat ja arendajasÔbralikumat kogemust, eriti JavaScripti-pÔhiste rakenduste jaoks.
- Puppeteer: Puppeteer on Node'i teek, mis pakub kĂ”rgetasemelist API-t peata Chrome'i vĂ”i Chromiumi juhtimiseks. See sobib suurepĂ€raselt brauseri ĂŒlesannete kraapimiseks ja automatiseerimiseks, kuid vĂ”ib nĂ”uda rohkem kĂ€sitsi konfiguratsiooni vĂ”rreldes Cypressiga otsast-lĂ”puni testimiseks.
- Playwright: Playwright on veel ĂŒks Microsofti vĂ€lja töötatud brauseritevaheline automatiseeritud testimise raamistik. Sellel on sarnasusi Puppeteeriga, kuid see pakub laiemat brauseri tuge. Cypressil on ainulaadne ajas rĂ€ndamise silur ja integreeritum testimiskogemus.
Raamistiku valik sÔltub teie projekti konkreetsetest vajadustest ja nÔuetest. Cypress on suurepÀrane valik kaasaegsete veebirakenduste jaoks, mis nÔuavad kiiret, usaldusvÀÀrset ja arendajasÔbralikku otsast-lÔpuni testimist.
Reaalse Maailma NĂ€ited Cypressi Kasutamisest
Uurime mĂ”nda reaalse maailma nĂ€idet selle kohta, kuidas Cypressi saab kasutada erinevat tĂŒĂŒpi veebirakenduste testimiseks:
E-kaubanduse Rakenduse Testimine
Saate Cypressi kasutada e-kaubanduse rakenduse erinevate kasutajavoogude testimiseks, nÀiteks:
- Toodete otsimine
- Toodete lisamine ostukorvi
- Tellimuse vormistamine ja esitamine
- Konto sÀtete haldamine
Siin on nÀide Cypressi testist, mis kontrollib, kas kasutaja saab edukalt toote oma ostukorvi lisada:
it('Lisab toote ostukorvi', () => {
cy.visit('/products')
cy.get('.product-card').first().find('button').click()
cy.get('.cart-count').should('have.text', '1')
})
Sotsiaalmeedia Rakenduse Testimine
Saate Cypressi kasutada sotsiaalmeedia rakenduse kasutajate interaktsioonide testimiseks, nÀiteks:
- Uue postituse loomine
- Postituse meeldimine
- Postituse kommenteerimine
- Teiste kasutajate jÀlgimine
Siin on nÀide Cypressi testist, mis kontrollib, kas kasutaja saab edukalt uue postituse luua:
it('Loob uue postituse', () => {
cy.visit('/profile')
cy.get('#new-post-textarea').type('Tere, maailm!')
cy.get('#submit-post-button').click()
cy.get('.post').first().should('contain', 'Tere, maailm!')
})
Pangandusrakenduse testimine
Pangandusrakenduste puhul saab Cypressi kasutada kriitiliste funktsioonide testimiseks, nÀiteks:- Turvaline sisselogimine
- KontojÀÀkide kontrollimine
- Raha ĂŒlekandmine
- Saajate haldamine
Test fondiĂŒlekande kontrollimiseks vĂ”ib vĂ€lja nĂ€ha selline (koos asjakohase turvalisuse tagamiseks):
it('Kannab raha edukalt ĂŒle', () => {
cy.visit('/transfer')
cy.get('#recipient-account').type('1234567890')
cy.get('#amount').type('100')
cy.intercept('POST', '/api/transfer', { statusCode: 200, body: { success: true } }).as('transfer')
cy.get('#transfer-button').click()
cy.wait('@transfer')
cy.get('.success-message').should('be.visible')
})
JĂ€reldus
Cypress on vĂ”imas ja mitmekĂŒlgne otsast-lĂ”puni testimise raamistik, mis aitab teil tagada oma veebirakenduste kvaliteeti ja usaldusvÀÀrsust. Selle arendajasĂ”bralik API, vĂ”imsad funktsioonid ja suurepĂ€rane jĂ”udlus muudavad selle populaarseks valikuks arendajate ja QA inseneride seas ĂŒle maailma. JĂ€rgides selles juhendis toodud parimaid praktikaid, saate kirjutada tĂ”husaid Cypressi teste, mis aitavad teil vead arendusprotsessi varases etapis kinni pĂŒĂŒda ja tarnida oma kasutajatele kvaliteetset tarkvara.
Kuna veebirakendused arenevad pidevalt, suureneb ka otsast-lÔpuni testimise tÀhtsus. Cypressi omaksvÔtmine ja selle integreerimine oma arendustöövoogu vÔimaldab teil luua tugevamaid, usaldusvÀÀrsemaid ja kasutajasÔbralikumaid veebikogemusi.