@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
Two Challenges:
1) Noise
2) Redundancy
@roesslerj16
Noise
@roesslerj17
automated tests
=
version control
@roesslerj18
*.log
*.class
target/.*
.gitignore
Ignore-List
of changes
Deny-List
of changes
check

everything
check

nothing
@roesslerj19
@roesslerj20
Ignore-List
of changes
Deny-List
of changes
check

everything
check

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

everything
check

nothing
@roesslerj22
Git for the GUI
@roesslerj23
# These files are ignored by git
# based on their name:
*.log
*.class
target/.*
.gitignore
@roesslerj24
# Ignore file for recheck.
# Ignore attributes globally:
attribute=class
.retest/recheck.ignore
@roesslerj25
# Ignore file for recheck.
# Ignore elements by attribute:
matcher: id=banner
.retest/recheck.ignore
@roesslerj26
# Ignore file for recheck.
# These can be combined:
matcher: id=div-b4f23, attribute-regex: font.*
.retest/recheck.ignore
@roesslerj27
ignore ≈ filter
@roesslerj28
Better than pixel diffing
@roesslerj29
Demo
@roesslerj30
Better than pixel diffing
@roesslerj31
Works with animations
@roesslerj
RedundancyRedundancyRedundancy
32
Redundancy
@roesslerj33
Tool Support
@roesslerj34
Tool Support
@roesslerj35
@roesslerj36
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
@roesslerj37
*************** 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.
@roesslerj38
@roesslerj39
findByRetestId
best match
return Element
find in
Golden Master
1-on-1 Assignment
Test
@roesslerj40
@roesslerj41
@roesslerj42
data-independent tests
@roesslerj43
+ rule-based deterministic ignore
+ open source
+ offline usage
+ unbreakable selenium
+ works for any technical interface
recheck benefits:
@roesslerj44
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
@roesslerj45
https://github.com/retest/recheck-web
@roesslerj46
https://github.com/retest/recheck-web-chrome-extension
@roesslerj47
Our Business Model
@roesslerj48
AI-based Test Generation
@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
49
Difference Testing
whitelist testing
easy creation
easy maintenance
Unbreakable Selenium:
easy to use
define own ids
data-independent tests
Summary
@roesslerj50
roessler@retest.de
https://www.facebook.com/retest.de
http://retest.rocks
@roesslerj
Please star us on GitHub!

Testing without assertions - #HUSTEF2019