Automated 

Frontend Testing

Über mich

Wie werden Browser überhaupt testbar?

  • Variante 1: Headless Browser, z.B. PhantomJS. SlimerJS, aber kein Endnutzerbrowser
     
  • Variante 2: Automatisierung echter Browser über WebDriver etc., oft abstrahiert durch Selenium (Firefox, IE, Chrome, Safari, Edge) 
     
  • Optionen für das Aufsetzen von Selenium: 
    • selbst aufsetzen (evtl. aufwändig)
    • Docker-Images für Firefox und Chrome
    • mieten (Browserstack, Saucelabs, Testingbot)

Erfahrungen mit der Zuverlässigkeit von Tests

  • zuverlässig: Auslesen von Elementen, grundsätzliche Seitennavigation
  • meistens zuverlässig: CSS-Eigenschaften
  • potenziell unzuverlässig: Auswerten von CSS-Eigenschaften, z.B. Element sichtbar, warte bis Element sichtbar
  • potenziell unzuverlässig: Benutzerinteraktionen

Functional Testing

  • Den Browser etwas machen lassen und sehen,
    ob das Richtige dabei raus kommt

Tools: The Intern

  • Node.js 
  • Selenium
  • API deckt die üblichen Funktionen des WebDriver ab
  • CLI-Integration, Reports
  • zusätzlich Unit Tests
  • hilfreich: Recorder für Tests als Chrome-Extension

 

Alternativen:  Webdriver.io (Selenium), 
NightwatchJS (Selenium)

define(function (require) {
	var registerSuite = require('intern!object');
	var assert = require('intern/chai!assert');

	registerSuite({
		name: 'index',

		'greeting form': function () {
			return this.remote
				.get(require.toUrl('index.html'))
				.setFindTimeout(5000)
				.findByCssSelector('body.loaded')
				.findById('nameField')
					.click()
					.type('Elaine')
					.end()
				.findByCssSelector('#loginForm input[type=submit]')
					.click()
					.end()
				.findById('greeting')
				.getVisibleText()
				.then(function (text) {
					assert.strictEqual(text, 'Hello, Elaine!',
						'Greeting should be displayed when');
				});
		}
	});
});

Tools: Behat

  • Framework für Behaviour Driven Development
  • PHP
  • Selenium
  • Besonderheit: Tests in einer Art Prosa
  • spezifische Interaktionen können zum Vokabular hinzugefügt werden
  • CLI-Integration, Reports

 

 

# features/blog.feature
Feature: Blog
  In order for our website to be awesome
  As a visitor
  I need to be able to read published posts

  Scenario: As a user with the editor role I can publish blog posts
  Given I am logged in as "editor-qa"
  When I follow "Posts"
  And I follow "Add New"
  And I press "Text"
  And I fill in "post_title" with "My Awesome Blog Post"
  And I fill in "content" with "This post was made by robots."
  And I press "Publish"
  Then I should see "Post published"

Visual Regression Testing

  • Idee: Abweichung zum Idealzustand feststellen und hervorheben

Tools: BackstopJS

  • Node.js 
  • PhantomJS oder SlimerJS, kein Selenium
  • mehrere Viewports möglich (= responsive)
  • Auswahl bestimmter kritischer Elemente
  • relativ vollständiges Testing Tool

 

Alternativen: PhantomCSS (Selenium), WebdriverCSS (Selenium)

Tools: Galen

  • Visual Spec Testing
    • ermöglicht das Testen von Webseiten gegen visuelle Spezifikationen
  • Selenium
  • mehrere Viewports möglich (= responsive)
  • umfangreiche Spec-Beschreibung mit Abhängigkeiten
  • CI-Integration
@objects
    comments            #comments
    article-content     div.article

= Main section =
    @on mobile, tablet 
        comments:
            width 300px 
            inside screen 10 to 30px top right 
            near article-content > 10px right 

    @on desktop
        comments:
            width ~ 100% of screen/width 
            below article-content > 20px 

Frontend Testing

By bkastl

Frontend Testing

  • 197