@roesslerj1
Testautomatisierung
ohne Assertions
Dr. Jeremias Rößler
https://retest.de
@roesslerj2
What is an assertion?
@roesslerj3
@roesslerj4
@roesslerj5
@roesslerj6
@roesslerj7
@roesslerj8
@roesslerj9
Test Pyramid
UI
Service
Unit
Maintenance
Fragility
Cost
@roesslerj10
@roesslerj11
Binding test to test-data!
@roesslerj12
What does an assertion do?
@roesslerj13
Assert correct behavior
@roesslerj14
1 - 2 = ?
• -1 is mathematically correct
• 0 if I don’t want to payback gift certificates to costumers
• 23 if I’m working with hours
• 59 if I’m working with minutes or seconds
• Something between 27 and 30 if I’m working with days
• 11 if I am working with months
• exception if I am working with degrees Calvin
• …
@roesslerj15
Requirements
Waterfall
Design
Development
Testing
Deployment
no more change
@roesslerj16
Agile
Requirements Design
Development
Testing
Deployment
change
Requirements Design
Development
Testing
Deployment
@roesslerj17
“correct” changes
@roesslerj18
When is a bug a bug?
When it’s not a feature!
@roesslerj19
Is it a bug?
.
..
text.c
other.files
for (. . .) {
if (name[0] == '.') continue;
. . .
}
ls
@roesslerj20
Is it a bug?
@roesslerj21
Is it a bug?
@roesslerj22
What is a bug?
Without specification, there are no bugs
— only surprises.
Brian Kernighan
“
@roesslerj23
Assert correct behavior
Detect change
@roesslerj24
Assertions detect change
@roesslerj25
Why do we test?
After
implementation?
1 + 1 = 3
2 + 2 = 4
@roesslerj26
@roesslerj28
@roesslerj29
Why do we test?
After
implementation?
1 + 1 = 3
2 + 2 = 4
After
change?
1 + 1 = 3
1 + 1 = 5
@roesslerj
automated
regression test
≠
test
30
@roesslerj
automated
regression test
=
version control
31
@roesslerj32
Why do we test?
After
implementation?
1 + 1 = 3
2 + 2 = 4
After
change?
1 + 1 = 3
1 + 1 = 5
1 + 1 = 2
@roesslerj33
@roesslerj34
@roesslerj35
@roesslerj36
Die Lücke schließen:
automatische Tests
@roesslerj37
Drawbacks of assertions
@roesslerj38
Testing
Actual wrong
Bug
Comparison Expected vs Actual
Test Execution
Done
No Difference
@roesslerj39
Actual wrong
Bug
Comparison Expected vs Actual
Update Expected
Expected wrong
Test Execution
Done
No Difference Difference
Evaluate Difference
Testing
@roesslerj40
Actual wrong
Bug
Comparison Expected vs Actual
Update Expected
Expected wrong
Test Execution
Done
No Difference Difference
Evaluate Difference
Testing
effort
effort
@roesslerj41
@roesslerj42
@roesslerj43
@roesslerj44
@roesslerj45
passes
@roesslerj46
Golden Master to the rescue
@roesslerj47
@roesslerj48
@roesslerj49
@roesslerj50
@roesslerj51
@roesslerj52
@roesslerj53
Even better…
@roesslerj54
@roesslerj55
Multilocators
@roesslerj56
@roesslerj57
Tool support
@roesslerj58
@roesslerj59
@roesslerj60
@roesslerj61
@roesslerj62
@roesslerj63
@roesslerj64
@roesslerj65
@Test
public void test_login() throws Exception {
final WebDriver driver = new FirefoxDriver();
driver.get( "http://www.retest.de" );
recheck.check( driver );
driver.findElement( By.id( "username" ) ).sendKeys( username );
driver.findElement( By.id( "pwd" ) ).sendKeys( password );
driver.findElement( By.className( "button" ) ).submit();
recheck.check( driver );
}
@roesslerj66
@Test
public void test_login() throws Exception {
final WebDriver driver = new RecheckDriver(new FirefoxDriver());
driver.get( "http://www.retest.de" );
recheck.check( driver );
driver.findElement( By.id( "username" ) ).sendKeys( username );
driver.findElement( By.id( "pwd" ) ).sendKeys( password );
driver.findElement( By.className( "button" ) ).submit();
recheck.check( driver );
}
@roesslerj67
RecheckDriver
findElement(by.id())
FirefoxDriver
findElement(by.bestMatch())
GoldenMaster
@roesslerj68
@Test
public void test_login() throws Exception {
final WebDriver driver = new RecheckDriver(new FirefoxDriver());
driver.get( "http://www.retest.de" );
recheck.check( driver );
driver.findElement( By.retestId( "username" ) ).sendKeys( username );
driver.findElement( By.retestId( "pwd" ) ).sendKeys( password );
driver.findElement( By.retestId( "button" ) ).submit();
recheck.check( driver );
}
@roesslerj69
https://github.com/retest/recheck-web
@roesslerj70
DEMO
@roesslerj
@roesslerjX
@roesslerjX@roesslerjX
Actual wrong
Bug
Comparison Expected vs Actual
Update Expected
Expected wrong
Test Execution
Done
No Difference Difference
Evaluate Difference
Testing
effort
effort
@roesslerjX
71
Questions?
@roesslerj
roessler@retest.de
@roesslerj
Thank you!
https://www.facebook.com/retest.de
http://retest.rocks

Testing ohne assertions