den här veckan dyker jag in i automatiserad testning med gradskiva.Eftersom byggandet av en filial misslyckas mycket nyligen med timeouts och andra problem, ska jag försöka ta reda på mer och fixa det här.

vad är automatiserad testning.

automatiserad testning gör livet enklare när det är korrekt och användbart :)automatiserad testning använder programvara/verktyg för att testa kod snabbt. Du ställer in testfall och de körs genom verktyget. Ingen mänsklig interaktion för att testa krävs efter att du skrev dessa fall. Det kan jämföra, utföra en mata in data genom testerna.

de vanligaste testerna och deras skillnader.

de två vanligaste testmetoderna jag stötte på hittills ärenhetstestning och E2E-testning.

enhetstestning

enhetstestning är inriktad på att testa enskilda enheter.Tänk på detta som en funktion eller en liten del av koden.Du hånar (falska) tjänster, nätverk och andra resurser och gör alla tester isolerade.
i Vinkelkarma och jasmin ram används mestskriv enhetstester.

E2E-testning

med e2e-testning kan du gå igenom GUI som en användare gör.Klicka på knappar, sidor, meny, CRUD. (inte i produktion) Den vanligaste användningen för E2E-testning med Angular är Selenium web-driver med gradskiva.
så för att testa din kod är det bra att använda enhetstester.Om du vill testa funktionell användning av din webbplats bör du prova E2E.

varför testa?

syftet är att snabbt stöta på problem.För E2E-testning: du vill inte heller testa genom att klicka på skärmar för att se IFA-knappen fungerar fortfarande eller en sida laddas själv.Det skulle vara mycket arbete och är inte konsekvent om det skulle görasav olika utvecklare.

ställa in gradskiva.

hur man installerar gradskiva.

för att installera gradskiva kör du följande från kommandoraden:
du installerar gradskiva genom att köra:

npm install -g protractor

sedan installerar du webdriver manager för selenium.

webdriver-manager update

webdriver-manager start

Bygg ett test.

först behöver du två filer för att skapa ett test, en specifik fil och konfigurationsfil.
i konfigurationsfilen konfigurerar du platsen för spec-filerna. Den innehåller också webbläsaren som du vill använda för att testa, standard är Chrome.Den selen serveraddress ingår att kommunicera.Och även ramverket är inställt, det här är Jasmine.Då ser det ut så här:

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

för att bygga ett test måste du bestämma ett fall. Du bygger fallet i spec-filen. Först bestämmer du vad testet måste do.In i det här fallet kontrollerar du om din målsida visar välkomstmeddelandet.

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

först beskriver du sidan eller elementet du vill testa, i det här exemplet är det målsidan. Beskriv är namnet på testsuite och Jasmine syntax.Den innehåller flödet från slut till slut. Inom detta är ’ it ’ testfall.
då bestämmer du vad ’ det ’ behöver göra. ’Det’ är en global funktion från Jasmine. Du kan ha flera ’it’ – testfall i flödet.(beskriv)
i det här fallet kontrollerar du om målsidan hade fått välkomstmeddelandet som visas och därför är tillgängligt som förväntat. ( sant, toBeThruthy) du kontrollerar också om texten är densamma som texten på målsidan (toEqual (’yourText’)

Async väntar.

JavaScript är asynkront, du vet inte vilket skript som ska köras först. Gradskiktsflöden är synkrona, dina steg är i en specifik exekveringsordning. Klicka på den här och sedan på den knappen.
gradskiva flöden skrivs med ett löfte. Gradskiva kan hantera löftet med en väntan tills den är klar.

syntaxen för async väntar är ungefär som TypeScript-syntaxen.
den asynkrona funktionen kan lindas med ’async ’ och’väntar’.
väntar används före den linje som vi vill vänta på.

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

vad var det största problemet med mina byggnader?

mina tester misslyckades mycket med timeout. Jag använde async await och hade fortfarande några problem. Som du kan se är syntaxen nästan densamma med TypeScript async/await.

Jag hittade detta på protractortest.org webbplats.

glöm inte att stänga av control_flow, du kan inte använda en blandning av async/await och kontrollflödet: async/await gör att kontrollflödet blir opålitligt (se github-problemet). Så om du asynkerar / väntar någonstans i en spec, bör du använda SELENIUM_PROMISE_MANAGER: false

Jag lade till detta i konfigurationen och felsökte de vänstra felen.
Jag bygger in lite väntetid / sömntid mellan vissa tester och det går bra.

Lämna ett svar

Din e-postadress kommer inte publiceras.