Functional Test Architecture with WebdriverIO
I wanted to record a brain dump of the architecture I've been using for my functional test suites. The main structure consists of three parts:
Node.js
Using WebdriverIO means using Node.js. This is actually a great thing for me as a front-end dev because:
- I'm already familiar with JavaScript, making it easier for to write test suites.
- Allows me to have a consistent development environment. I use Mocha/Chai for my unit tests as well. I use NPM for dependency management. And most importantly, I don't have to install and maintain of another language engine.
WebdriverIO
WebdriverIO (wdio for short) provides Selenium bindings for NodeJS. This allows me to control the browser using Selenium, which brings a lot of functionality to my test automation.
WebdriverCSS is a plugin to wdio, which provides the ability to do visual regression testing. I layer WebdriverCSS on top of WebdriverIO to provide extra functionality in my tests.
Mocha/Chai
Mocha, a JavaScript test framework, brings several features to my testing suite, including: CI integration, pre/post-test hooks, and the ability to configure specific test runs.
Chai is an assertion language that lets me write assertions in a more human-readable manner.
I use the 'expect' syntax for assertions. For example:
browser
.title(function(err, res) {
expect(res.value).to.equal("Inbox");
});
All of these tools combined give me a great testing setup that doesn't require context-switching or extra maintenance.