© KenoKickit/Shutterstock.com
Eine Übersicht zu CodeceptJS und weiteren Testtools

Tools für die Testautomation


JavaScript ist bei Weitem die führende Sprache für Webentwicklung. Die meisten Frameworks für die Entwicklung von Webanwendungen basieren darauf. Neu am Markt im Bereich der Testautomationsframeworks ist CodeceptJS. Dieser Artikel stellt einige Testtools vor und gibt eine Einführung in die Handhabung und Arbeitsweise von CodeceptJS.

Führende Webentwicklungsframeworks wie Angular, React, Vue.js und andere nutzen JavaScript. Aber auch Testautomationsframeworks wie Protractor, Nightwatch.js und WebdriverIO basieren darauf. JavaScript ist eine der führenden Sprachen der Webentwicklung. Aufgrund dessen ist es nicht verwunderlich, dass die meisten Open-Source-Testtools auch in JavaScript geschrieben sind und das automatisierte Testen dieser Anwendungen unterstützen. Das Testautomationsframework CodeceptJS ist neu auf dem Markt und verwendet einen szenariogesteuerten Behavior-Driven-Development-Ansatz (BDD).

Typen von Testtools

Der Begriff Testtool führt zu einigen Missverständnissen, da je nach Betrachter Verschiedenes darunter verstanden wird. Auch Wikipedia ist hier außen vor. Testtools können in die folgenden Funktionalitäten unterteilt werden:

  • Bereitstellung einer Testdurchführungsinfrastruktur (Mocha, Jasmine, Jest, Karma, Cucumber)

  • Bereitstellung von Assertionsfunktionen (Chai, Jasmine, Jest)

  • Bereitstellung von Mocks und Stubs (Sinon, Jasmine, Jest)

  • Bereitstellung von Durchführungs- und Code-Coverage-Berichten (Istanbul, Jest)

  • Bereitstellung einer Browser- oder browserartigen Umgebung für die Durchführung von GUI-Tests (Protractor, Nightwatch.js, WebdriverIO)

Einige davon bieten nur eine einzige Funktionalität, andere bieten eine Kombination. In den meisten Fällen ist es üblich, eine Kombination von Testtools zu verwenden, auch wenn dasselbe mit einem einzigen Werkzeug erreicht werden kann, um eine gewisse Flexibilität im Umgang mit den Testtools zu erhalten. Beim Schreiben von UI-E2E-Tests (User Interface, End-to-End) stehen mehrere Frameworks zur Verfügung, die es einem Neuling schwer machen, eine Entscheidung zu treffen, welches Framework verwendet werden soll. Die Entscheidung zugunsten des falschen Frameworks kann teuer werden. Hier kommt CodeceptJS ins Spiel.

In CodeceptJS werden Tests in einer Domain-specific Language geschrieben, die für Nicht-Techniker einfach zu verstehen und zu verwenden ist. Aber noch wichtiger ist die Tatsache, dass die DSL die darunterliegenden, zur Anwendung kommenden Testautomationsframeworks abstrahiert. Egal, welches Framework Sie verwenden, Tests sollten fast gleich aussehen. Wenn Sie (später) die Einschränkung eines Frameworks spüren, können Sie Ihre Tests leicht umstellen. Das heißt, dass mit ein und demselben CodeceptJS-Code verschiedene Testautomationsbibliotheken wie Protractor, Nightwatch.js, WebdriverIO und Appium angesteuert werden können.

Ranking: Node.js-Frameworks für End-to-End-Webtests

Werfen wir einen kurzen Blick auf die beliebtesten Node.js-Frameworks für End-to-End-Tests im Bereich Webentwicklung.

groetz_codeceptjs_1.tif_fmt1.jpgAbb. 1: Die beliebtesten Node.js-Frameworks für End-to-End-Webtests [1]

Laut npmtrends.com (Abb. 1), einer Webseite zum Vergleichen der Downloadanzahl von verschiedenen Packages, haben wir folgendes Ranking nach GitHub-Sternen (Stand: 08.10.2018):

  • Nightwatch.js: 8619 Sterne

  • Protractor: 7828 Sterne

  • CasperJS: 7253 Sterne

  • WebdriverIO: 4321 Sterne

Die Downloadstatistiken in Abbildung 1 zeigen ein anderes Bild als die vergebenen GitHub-Sterne. Während z. B. bei den Downloads WebdriverIO auf Platz zwei liegt, belegt es bei den vergebenen GitHub-Sternen nur den vierten Platz. Werfen wir nun einen genaueren Blick auf die einzelnen Testframeworks.

CasperJS ist ein Testframework für PhantomJS und SlimerJS (Listing 1). Das Framework ermöglicht das Testen von Webanwendungen im Browser-Headless-Mode. Der Vorteil ist, dass die Tests so schneller laufen und keine Browser in der CI/CD-Pipeline installiert werden müssen. CasperJS ermöglicht die Erstellung von vollständigen Szenarien mithilfe von High-Level-Funktionen und einer einfachen Benutzeroberfläche. Dieser Umstand macht das Framework sehr ansprechend für Personen, die keinen starken technischen Hintergrund haben.

Listing 1 – CasperJS example [2]

casper.test.begin('Testing Google', 1, function(test){ casper.start('http//:google.com'); casper.then(function(){ test.assertTitle('Google', 'Google has correct title'); }); casper.run(function(){ test.done(); }) });

Protractor: Für das automatisierte Testen von Angular-Anwendungen stellt Google mit Protractor ein mächtiges End-to-End-Test-Framework zur Verfügung (Listing 2), das auf die Besonderheiten von Angular abgestimmt ist. Protractor ist in Node.js geschrieben und entwickelt seine vollen Fähigkeiten in Zusammenarbeit mit Selenium, WebDriver und diversen BBD-Frameworks wie Jasmine und Cucumber. Die Tests führt Protractor am echten Browser aus, wobei Selenium und WebdriverJS als Bindeglied dienen, um Chrome, Firefox und IE zu steuern. Hybride Apps können via Appium, der mobilen Variante von Selenium, auf Emulatoren und echten Geräten automatisiert getestet werden.

Listing 2 – Protractor example [3]

describe('angularjs homepage todo list', function() { it('should add a todo', function() { browser.get('https://angularjs.org'); element(by.model('todoList.todoText')).sendKeys('protractor test'); element(by.css('[value="add"]')).click(); var todoList = element.all(by.repeater('todo in todoList.todos')); expect(todoList.count()).toEqual(3); expect(todoList.get(2).getText()).toEqual('write first protractor test'); todoList.get(2).element(by.css('input')).click(); var completedAmount = element.all(by.css('.done-true')); expect(completedAmount.count()).toEqual(2); });

Nightwatch ist eine einfach zu benutzende Node.js-basierte End-to-End-(E2E-)Testlösung für browserbasierte Apps und Webseiten (Listing 3). Es verwendet das leistungsstarke W3C WebDriver API, um Befehle und Assertions auf DOM-Elemente auszuführen. Es besitzt eine einfache, aber leistungsstarke Syntax, mit der Tests sehr schnell entwickelt werden können. Der mitgel...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang