testdrivning med automatiska acceptanstester – praktiska erfarenheter
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 ABTRANSCRIPT
Testdrivning med automatiska acceptanstester – praktiska
erfarenheter
Sebastian de Bachtin
Projektet
Hur vi vågade förändra ett system timmar innan lansering!
StartFörändrad funktionalitet Lansering
Förändringar innan leverans
Test
Förändrad funktionalitet
Lansering
Teamet
• Fem C# utvecklare • En JavaScript / GUI-utvecklare• En testare• En domänexpert• En projektledare
Testdrivning med automatiska acceptanstester – praktiska
erfarenheter
Fallerande test
Testdrivning med automatiska acceptanstester – praktiska
erfarenheter
Fallerande test
Implementera
Testdrivning med automatiska acceptanstester – praktiska
erfarenheter
Fallerande test
Implementera Städa upp
Testdrivning med automatiska acceptanstester – praktiska
erfarenheter
Acceptanstester skall definiera hur systemet skall uppföra sig.
Testdrivning med automatiska acceptanstester – praktiska
erfarenheter
GUI
LogikIf (maybe) { then} else
GUI
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Acceptanstester
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Acceptanstester
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Acceptanstester
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Tråkigt och tar lång tid
Automatiska acceptanstester
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Click(”Spara”); Assert.IsTextPresent(”Sparad”);
Acceptanstester - Selenium
Acceptanstester - Selenium
Acceptanstester - Selenium
Acceptanstester - Selenium
Acceptanstester - SeleniumClick(”Spara”);
Acceptanstester - SeleniumClick(”Spara”); Assert.IsTextPresent(”Sparad”);
Acceptanstester - SeleniumClick(”Spara”); Assert.IsTextPresent(”Sparad”);
Acceptanstester - Selenium
Selenium låste sig och kunde inte stänga ned webbläsarsessionerna.
Acceptanstester - Selenium
• 252 tester• Ca 20 minuter att köra alla tester• Körde dem en gång per dag• Tolka dem manuellt
Acceptanstester - Selenium
Tester genom grafiskt gränssnitt
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Tester genom grafiskt gränssnitt
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Assert.IsTextPresent(”Sparad”);
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”);
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);
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");
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");
Tester genom grafiskt gränssnitt
GetAllTheButtonsOnPage() {MatchCollection matches = Regex.Matches(html, @"(\
<button(/?[^\>]+)\>)“)...Return List<Button>
}
Tester genom grafiskt gränssnitt
Testdriv inte fram acceptanstester!
Fallerande test Implementera Städa upp
Acceptanstester - Selenium
Databas
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Databas
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Databas
Databas
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Databas
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
TEST_USER_ID_ARE_ENABLED
Tester genom grafiskt gränssnitt
Logik
Databas
If (maybe) { WTF} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Manuella tester
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Manuella tester
Logik
Databas
If (maybe) { then} else
Id | Text | Enable1 | a | true2 | b | false3 | c | true
GUI
Hur vi vågade förändra ett system timmar innan lansering!
StartFörändrad funktionalitet Lansering
Förändringar innan leverans
Manuella tester
Förändrad funktionalitet
Förändringar innan leverans
Förändrad funktionalitet
Automatiska acceptanstester
Manuella tester
Testdrivning med automatiska acceptanstester – praktiska
erfarenheter
Sebastian de Bachtin