@roesslerj1
Dr. Jeremias Rößler (Roessler)
https://retest.de
Test Automation
without Assertions
@roesslerj2
Please star us on GitHub!
Everyone who gives us a GitHub star, gets a sticker.
@roesslerj3
expect(umbrellaOpens).toBe(true)
tests: 1 passed, 1 total
**all tests passed**
@roesslerj4
Teaser-DEMO
@roesslerj5
We do one thing different.
@roesslerj6
You don’t define the outcome,
you approve it.
First you ensure that everything is as wanted.
Then we make sure it doesn’t change.
@roesslerj7
automated tests
≠
tests
@roesslerj8
automated tests
=
version control
@roesslerj9
Where has the
Code changed?
@roesslerj10
@roesslerj11
Where has the
_Software_ changed?
@roesslerj12
Closing the gap:
automated tests
@roesslerj13
automated tests
=
version control
@roesslerj14
@roesslerj15
@roesslerj16
passes
@roesslerj17
@roesslerj18
@roesslerj19
@roesslerj20
@roesslerj21
@roesslerj22
Two Challenges:
1) Noise
2) Redundancy
@roesslerj23
Noise
@roesslerj24
automated tests
=
version control
@roesslerj25
*.log
*.class
target/.*
.gitignore
Ignore-List
of changes
Deny-List
of changes
check

everything
check

nothing
@roesslerj26
@roesslerj27
Ignore-List
of changes
Deny-List
of changes
check

everything
check

nothing
@roesslerj28
Ignore-List
of changes
Deny-List
of changes
check

everything
check

nothing
@roesslerj29
Git for the GUI
@roesslerj30
# These files are ignored by git
# based on their name:
*.log
*.class
target/.*
.gitignore
@roesslerj31
# Ignore file for recheck.
# Ignore attributes globally:
attribute=class
.retest/recheck.ignore
@roesslerj32
# Ignore file for recheck.
# Ignore attributes with regex:
attribute-regex=.*
.retest/recheck.ignore
@roesslerj33
# Ignore file for recheck.
# Ignore elements by tag:
matcher: type=a
.retest/recheck.ignore
@roesslerj34
# Ignore file for recheck.
# Ignore elements by attribute:
matcher: id=banner
.retest/recheck.ignore
@roesslerj35
# Ignore file for recheck.
# These can be combined:
matcher: id=div-b4f23, attribute-regex: font.*
.retest/recheck.ignore
@roesslerj36
# Ignore file for recheck.
# Ignore whole subtrees:
matcher: xpath=HTML[1]/BODY[1]/DIV[1]/DIV[1]/DIV[1]
.retest/recheck.ignore
@roesslerj37
ignore ≈ filter
@roesslerj38
Better than pixel diffing
@roesslerj39
Demo
@roesslerj40
Better than pixel diffing
@roesslerj41
Works with animations
@roesslerj
RedundancyRedundancyRedundancy
42
Redundancy
@roesslerj43
Tool Support
@roesslerj44
Tool Support
@roesslerj45
@roesslerj46
new version
findElement(by.id(“sign-in”))
ID changed
use
new element
and log
find in
old version
old version
breaks
create 1-on-1
assignment
new version
best match
@roesslerj47
*************** recheck warning ***************
The HTML id attribute used for element identification changed
from 'username' to 'asda'.
retest identified the element based on the persisted Golden
Master.
If you apply these changes to the Golden Master , your test
de.retest.recheck.example.MyUnbreakableSeleniumTest will
break.
Use `By.id("asda")` or `By.retestId("username-1")` to update
your test MyUnbreakableSeleniumTest.java:27.
@roesslerj48
findByRetestId
best match
return Element
find in
Golden Master
1-on-1 Assignment
Test
@roesslerj49
@roesslerj50
@roesslerj51
data-independent tests
@roesslerj52
+ rule-based deterministic ignore
+ open source
+ offline usage
+ unbreakable selenium
+ works for any technical interface
recheck benefits:
@roesslerj53
some Feedback
… I was thrilled by that
product and new
approach…
… let me congratulate you on your brilliant
idea of the unbreakable Selenium and the
web page difference checking solutions. I
think this is a very much needed solution in
the website testing field.
Ahmed Magdy
Michael Wowro
… the tool is very helpful, gives detailed
information and is easy to use …
Karolina Wierbol
@roesslerj54
https://github.com/retest/recheck-web
@roesslerj55
https://github.com/retest/recheck-web-chrome-extension
@roesslerj56
Our Business Model
@roesslerj
new version
findElement(by.id(“sign-in”))
ID changed
use
new element
and log
find in
old version
old version
breaks
create 1-on-1
assignment
new version
best match
@roesslerjX
Better than pixel diffing
57
Difference Testing
whitelist testing
easy creation
easy maintenance
Unbreakable Selenium:
easy to use
define own ids
data-independent tests
Summary
@roesslerj58
roessler@retest.de
https://www.facebook.com/retest.de
http://retest.rocks
@roesslerj
Please star us on GitHub!

Testing Without Assertions