SAPUI5 User Interface Testing

Testing the $#*! out of your UI

Objective

  • Ready to go test setup including
    • Unit Tests
    • Integration Tests
  • CI-ready test automation using karma
  • Visual regression testing using BackstopJS

in 30 minutes

Setup

  • Create Project from SAP Web IDE Template             "SAP Fiori Master-Detail Application" (metadata.xml)
  • Sync via git or export
  • npm init
  • add server.js
  • add server.js as main script
  • npm start
  • http://localhost:3000

test.html

  • flpSandbox.html - Runs app in launchpad sandbox
  • flpSandboxMockServer.html - Runs app in launchpad sandbox with mock data
  • testsuite.qunit.html - Runs all tests
  • unitTests.qunit.html - Runs all unit tests
  • allTests.js - Loads/includes all unit tests
  • opaTest.qunit.html - Runs all integration tests
  • AllJourneys.js - Loads/includes all integration tests

Automation

Test Automation with karma

  • npm install --save-dev karma karma-openui5
  • npm install -g karma-cli
  • add karma.conf.js
  • adapt openui5 path
  • add resourceRoots
  • add files config
  • karma start

Add QUnit

  • npm install --save-dev karma-qunit qunitjs
  • add to frameworks in karma.conf.js

 

be aware of qunit version

keep in sync with your SAPUI5 version

Add a Launcher

  • npm install --save-dev karma-chrome-launcher
  • Add browsers config to karma.conf.js

Add Coverage Reporting

  • npm install --save-dev karma-coverage
  • add preprocessors to karma.conf.js
  • add reporters to karma.conf.js

Add JUnit Reporting

  • npm install --save-dev karma-junit-reporter
  • add preprocessors to karma.conf.js
  • add reporters to karma.conf.js

Add Chrome Headless

  • npm install --save-dev puppeteer
  • add snippet below
  • karma start --browsers ChromeHeadless
// see https://github.com/karma-runner/karma-chrome-launcher
const ChromiumRevision = 
  require('puppeteer/package.json').puppeteer.chromium_revision;
const Downloader = require('puppeteer/utils/ChromiumDownloader');
const revisionInfo = Downloader
  .revisionInfo(Downloader.currentPlatform(), ChromiumRevision);

process.env.CHROME_BIN = revisionInfo.executablePath;

Add npm scripts

"scripts": {
  "test": "karma start --single-run 
--browsers ChromeHeadless",
  "tdd": "karma start"
}
npm test

see gist

BackstopJS

  • npm install -g backstopjs
  • backstop init
  •  

backstop.json

  • set url
  • use flpSandboxMockServer
  • set serverDelay=0
  • make sure UI is completly rendered
    • delay = wait for ms
    • readyEvent = wait for string logged to the console
    • readySelectors = wait for a selector to appear 

backstop test

SAPUI5 User Interface Testing

By Christian Schuff

SAPUI5 User Interface Testing

  • 739