Testdrivning med automatiska acceptanstester – praktiska erfarenheter

50
Testdrivning med automatiska acceptanstester – praktiska erfarenheter Sebastian de Bachtin

description

Automatiserade accepanstester är en stor styrka för ett system. De skall verifiera att systemet fungerar som det är tänkt efter en förändring. Men de kan bli dyrt att underhålla dem om de inte är skapta för att tåla irrelevanta förändringar. Vad skall man tänka på när man vill skapa automatiska acceptanstester? Jag delar med mig av mina praktiska erfarenheter av Selenium, använt i ett skarpt projekt. Vilka var fallgroparna och vilka var vinsterna?Talare är Sebastian de Bachtin från Dynabyte AB

Transcript of Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Page 1: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Testdrivning med automatiska acceptanstester – praktiska

erfarenheter

Sebastian de Bachtin

Page 2: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Projektet

Page 3: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Hur vi vågade förändra ett system timmar innan lansering!

StartFörändrad funktionalitet Lansering

Page 4: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Förändringar innan leverans

Test

Förändrad funktionalitet

Lansering

Page 5: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Teamet

• Fem C# utvecklare • En JavaScript / GUI-utvecklare• En testare• En domänexpert• En projektledare

Page 6: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Testdrivning med automatiska acceptanstester – praktiska

erfarenheter

Page 7: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Fallerande test

Testdrivning med automatiska acceptanstester – praktiska

erfarenheter

Page 8: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Fallerande test

Implementera

Testdrivning med automatiska acceptanstester – praktiska

erfarenheter

Page 9: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Fallerande test

Implementera Städa upp

Testdrivning med automatiska acceptanstester – praktiska

erfarenheter

Page 10: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester skall definiera hur systemet skall uppföra sig.

Testdrivning med automatiska acceptanstester – praktiska

erfarenheter

Page 11: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

GUI

Page 12: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

LogikIf (maybe) { then} else

GUI

Page 13: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 14: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 15: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 16: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Tråkigt och tar lång tid

Page 17: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Automatiska acceptanstester

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Click(”Spara”); Assert.IsTextPresent(”Sparad”);

Page 18: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - Selenium

Page 19: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - Selenium

Page 20: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - Selenium

Page 21: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - Selenium

Page 22: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - SeleniumClick(”Spara”);

Page 23: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - SeleniumClick(”Spara”); Assert.IsTextPresent(”Sparad”);

Page 24: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - SeleniumClick(”Spara”); Assert.IsTextPresent(”Sparad”);

Page 25: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - Selenium

Selenium låste sig och kunde inte stänga ned webbläsarsessionerna.

Page 26: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - Selenium

• 252 tester• Ca 20 minuter att köra alla tester• Körde dem en gång per dag• Tolka dem manuellt

Page 27: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - Selenium

Page 28: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 29: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Assert.IsTextPresent(”Sparad”);

Page 30: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Assert.IsUrl(”SavedPage.aspx”);

Page 31: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUIAssert.IsUrl(SAVED_PAGE_NAME);

Page 32: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

selenium.Click("//form[@id='frm']/table/tbody/tr[2]/td[1]/table/tbody/tr[2]/td/table/tbody/tr/td/table[3]/tbody/tr[3]/td/a");

Page 33: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

selenium.Click("//form[@id='frm']/table/tbody/tr[2]/td[1]/table/tbody/tr[2]/td/table/tbody/tr/td/table[3]/tbody/tr[3]/td/a");

Page 34: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

GetAllTheButtonsOnPage() {MatchCollection matches = Regex.Matches(html, @"(\

<button(/?[^\>]+)\>)“)...Return List<Button>

}

Page 35: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

Testdriv inte fram acceptanstester!

Fallerande test Implementera Städa upp

Page 36: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Acceptanstester - Selenium

Page 37: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Databas

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 38: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Databas

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Databas

Page 39: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Databas

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 40: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Databas

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

TEST_USER_ID_ARE_ENABLED

Page 41: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Tester genom grafiskt gränssnitt

Logik

Databas

If (maybe) { WTF} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 42: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Manuella tester

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 43: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Manuella tester

Logik

Databas

If (maybe) { then} else

Id | Text | Enable1 | a | true2 | b | false3 | c | true

GUI

Page 44: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Hur vi vågade förändra ett system timmar innan lansering!

StartFörändrad funktionalitet Lansering

Page 45: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Förändringar innan leverans

Manuella tester

Förändrad funktionalitet

Page 46: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Förändringar innan leverans

Förändrad funktionalitet

Automatiska acceptanstester

Manuella tester

Page 47: Testdrivning med automatiska acceptanstester – praktiska erfarenheter

Testdrivning med automatiska acceptanstester – praktiska

erfarenheter

Sebastian de Bachtin

Page 48: Testdrivning med automatiska acceptanstester – praktiska erfarenheter
Page 49: Testdrivning med automatiska acceptanstester – praktiska erfarenheter
Page 50: Testdrivning med automatiska acceptanstester – praktiska erfarenheter