Deze week dook ik in geautomatiseerde testen met Gradenboog.Aangezien het bouwen van een branch de laatste tijd veel faalt met time-outs en andere issues, ga ik proberen om meer te weten te komen en dit op te lossen.

Wat is geautomatiseerd testen?

geautomatiseerd testen maakt het leven gemakkelijker als het correct en nuttig is ingesteld 🙂 geautomatiseerd testen maakt gebruik van software/tooling om code snel te testen. Je zet testcases op en die worden uitgevoerd door middel van de tooling. Er is geen menselijke interactie nodig om te testen nadat je die zaken schreef. Het kan vergelijken, voeren een Voer gegevens door de tests.

de meest voorkomende tests en hun verschillen.

de twee meest voorkomende testmethoden die ik tot nu toe ben tegengekomen zijn unit testing en E2E testing.

Unit testing

Unit testing is gericht op het testen van afzonderlijke eenheden.Zie dit als een functie of een klein stukje code.Je bespot (nep) diensten, netwerk en andere middelen en doet alle testen geïsoleerd.
In Angular Karma en Jasmine framework worden meestal towrite unit tests gebruikt.

E2E testing

met E2E testing kun je door de GUI gaan zoals een gebruiker dat doet.Klikken op knoppen, pagina ‘s,menu’ s, CRUD. (niet in productie)
Het meest voorkomende gebruik voor E2E testen met hoekige is Selenium web-driver met Gradenboog.
dus voor het testen van je code is het handig om unit tests te gebruiken.Als u het functionele gebruik van uw site wilt testen, moet u E2E proberen.

waarom testen?

het doel is om problemen snel tegen te komen.Voor E2E testen: ook u niet wilt testen door te klikken hoewel schermen om te zien of een knop werkt nog steeds of een pagina wordt geladen door jezelf.Dat zou een hoop werk en is niet consistent als het zou worden doneby verschillende ontwikkelaars.

Gradenboog instellen.

hoe gradenboog te installeren.

om gradenboog te installeren voer je het volgende uit vanaf de opdrachtregel:
je installeert gradenboog door het uitvoeren van:

npm install -g protractor

vervolgens installeert je webdriver manager voor selenium.

webdriver-manager update

webdriver-manager start

Bouw een test op.

eerst heb je twee bestanden nodig om een test aan te maken, een spec-bestand en een config-bestand.
in het configuratiebestand configureert u de locatie van de spec-bestanden. Het bevat ook de browser die u wilt gebruiken om te testen, standaard is Chrome.De selenium serveradres is in opgenomen om te communiceren.En ook het raamwerk is ingesteld, Dit is Jasmine.Dan ziet het er ongeveer zo uit:

 // conf.jsexports.config = { framework: 'jasmine', seleniumAddress: 'http://localhost:4444/wd/hub', specs: }

om een test te bouwen moet je een case bepalen. Je bouwt de zaak op in het spec-bestand. Eerst bepaal je wat de test moet doen do.In in dit geval controleert u of uw landingspagina het welkomstbericht weergeeft.

 describe('Landing page', () => {let page: YourAppbeforeEach(() => { page = new YourApp() page.navigateTo('/login') }) it('should display welcome message', () => { expect(page.containsElement('#welcome')).toBeTruthy() expect(page.getElementText('#welcome')).toEqual('Welcome') })})

eerst beschrijf je de pagina of het element dat je wilt testen, in dit voorbeeld is het de landing page. Beschrijf is de naam van de testsuite en Jasmine syntaxis.Het bevat de stroom van begin tot eind. Daarin zijn’ it ‘ testcases.
dan bepaal je wat ‘ het ‘ moet doen. ‘Het’ is een wereldwijde functie van Jasmine. Je kunt meerdere ‘it’ testcases in de flow hebben.(describe)
In dit geval controleert u of de bestemmingspagina het welkomstbericht heeft ontvangen en daarom beschikbaar is zoals verwacht. (true, toBeThruthy) u controleert ook of de tekst hetzelfde is als de tekst op de bestemmingspagina ( toEqual(‘uw tekst’)

Async wachten.

JavaScript is asynchroon, je weet niet welk script het eerst zal uitvoeren. Gradenboog stromen zijn synchroon, uw stappen zijn in een specifieke volgorde van uitvoering. Klik op deze en dan op die knop.
Gradenboog flows worden geschreven met een belofte. Gradenboog kan omgaan met de belofte met een wachten tot het is voltooid.

de syntaxis van async await lijkt veel op de syntaxis van het TypeScript.
de asynchrone functie kan worden omwikkeld met’ async ‘en’await’.
wachten wordt gebruikt voor de regel waarop we willen wachten.

 describe('Landing page', () => {let page: YourAppbeforeEach(() => { page = new YourApp() page.navigateTo('/login') }) it('should display welcome message',async () => { expect(await page.containsElement('#welcome')).toBeTruthy() expect(await page.getElementText('#welcome')).toEqual('Welcome') })})

wat was het grootste probleem met mijn builds?

mijn tests zijn veel mislukt met time-outs. Ik gebruikte async Wait en had nog wat problemen. Zoals je kunt zien, is de syntaxis bijna hetzelfde met TypeScript async/await.

Ik vond dit op de protractortest.org site.

vergeet niet control_flow uit te schakelen, je kunt geen mix van async/await en de control flow gebruiken: async/await zorgt ervoor dat de control flow onbetrouwbaar wordt (zie GitHub probleem). Dus als je async / wait ergens in een specificatie, moet je de SELENIUM_PROMISE_MANAGER gebruiken: false

Ik heb dit toegevoegd aan de configuratie en debugged de resterende fouten.
Ik bouw wat wacht / slaap tijd tussen sommige tests en het werkt prima.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.