Wenn Sie in Ihrer Karriere eine ernsthafte Entwicklung durchgeführt haben, haben Sie wahrscheinlich den Punkt erreicht, als Sie die Bedeutung automatisierter Tests während der Entwicklung erkannt haben. Abhängig von Ihrer Erfahrung könnte Sie diese Erkenntnis in einem großen Ausbruch treffen oder sie kann im Laufe der Zeit sanft zu Ihnen kommen, aber sie wird schließlich zur zweiten Natur. Automatische Tests werden in vielen Formen geliefert, von Unit -Tests, wenn Sie isolierte Codestücke testen, bis hin zu Integrations- und Funktionstests, wenn Sie testen, wie sich verschiedene Teile Ihres Systems zusammen verhalten. In diesem Artikel geht es nicht um einen Überblick über automatische Tests im Allgemeinen. Es geht um eine bestimmte und eine relativ neue Nische, die als visuelle Regressionstest .
bezeichnet wirdvisuelle Regressionstests verfolgen einen alternativen Ansatz zum Testen von Webseiten. Anstatt nur sicherzustellen, dass ein Element oder ein Textwert im DOM vorhanden ist, öffnet der Test tatsächlich die Seite und prüft, ob dieser spezielle Block genau so aussieht, wie Sie es für möchten. Um sicherzustellen, dass Sie den Unterschied aufgenommen haben, lassen Sie mich Ihnen ein Beispiel geben. Stellen Sie sich vor, Sie möchten, dass Ihre Website Ihre Besucher mit einer freundlichen Nachricht begrüßt:
<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
Um sicherzustellen, dass es funktioniert, können (und sollten) Einheit den Code -Stück testen, der die Nachricht erzeugt, und prüft, ob es den richtigen Namen einfügt. Sie können auch einen Funktionstest mit Selen oder Prospraktor schreiben, um festzustellen, ob das Element tatsächlich auf der Seite mit dem richtigen Text vorhanden ist. Aber das ist nicht genug. Wir möchten nicht nur testen, dass der Text korrekt generiert wird oder im DOM angezeigt wird, sondern um sicherzustellen Jemand hat die Farbe des Textes nicht versehentlich außer Kraft gesetzt. Es gibt eine Reihe von Tools dafür, aber heute werden wir uns insbesondere eine Option ansehen - Phantomcss. Was ist Phantomcss?
Phantomcss ist auf mehreren Schlüsselkomponenten aufgebaut:
Casperjs - Ein Werkzeug zum Interagieren mit einem Phantomcss oder Slimerjs -Browser. Sie können eine Seite öffnen und Benutzerinteraktionen ausführen, z. B. auf Schaltflächen oder Eingabeteile. Darüber hinaus bietet Casperjs ein eigenes Test -Framework und die Möglichkeit, Screenshots einer Seite zu erfassen.
Nehmen wir es für einen Spin
Einrichten eines Testprojekts
So installieren Sie den Webserver, initialisieren Sie ein NPM-Projekt und installieren Sie das HTTP-Server-Paket.
<span><span><!doctype html></span> </span><span><span><span><html</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><style</span>></span><span> </span></span><span><span> <span><span>.tag</span> { </span></span></span><span><span> <span>color: #fff; </span></span></span><span><span> <span>font-size: 30px; </span></span></span><span><span> <span>border-radius: 10px; </span></span></span><span><span> <span>padding: 10px; </span></span></span><span><span> <span>margin: 10px; </span></span></span><span><span> <span>width: 500px; </span></span></span><span><span> <span>} </span></span></span><span><span> </span></span><span><span> <span><span>.tag-first</span> { </span></span></span><span><span> <span>background: lightcoral; </span></span></span><span><span> <span>} </span></span></span><span><span> </span></span><span><span> <span><span>.tag-second</span> { </span></span></span><span><span> <span>background: lightskyblue; </span></span></span><span><span> <span>} </span></span></span><span><span> </span><span><span></style</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> class<span>="tag tag-first"</span>></span>The moving finger writes, and having written moves on.<span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="tag tag-second"</span>></span>Nor all thy piety nor all thy wit, can cancel half a line of it.<span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Definieren wir ein einfaches NPM -Skript, um den Server auszuführen. Fügen Sie einfach den folgenden Skripteabschnitt zu package.json
<span>npm init </span><span>npm install http-server --save-dev</span>
<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
Jetzt können Sie NPM -Start im Projektordner ausführen, und auf der Indexseite ist auf der Standardadresse http://127.0.0.1:8080 zugegriffen. Starten Sie den Server und lassen Sie ihn vorerst ausgeführt. Wir brauchen es in einiger Zeit.
Die Installation von Phantomcss ist einfach. Sie müssen Ihrem Projekt nur einige Abhängigkeiten hinzufügen:
<span><span><!doctype html></span> </span><span><span><span><html</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><style</span>></span><span> </span></span><span><span> <span><span>.tag</span> { </span></span></span><span><span> <span>color: #fff; </span></span></span><span><span> <span>font-size: 30px; </span></span></span><span><span> <span>border-radius: 10px; </span></span></span><span><span> <span>padding: 10px; </span></span></span><span><span> <span>margin: 10px; </span></span></span><span><span> <span>width: 500px; </span></span></span><span><span> <span>} </span></span></span><span><span> </span></span><span><span> <span><span>.tag-first</span> { </span></span></span><span><span> <span>background: lightcoral; </span></span></span><span><span> <span>} </span></span></span><span><span> </span></span><span><span> <span><span>.tag-second</span> { </span></span></span><span><span> <span>background: lightskyblue; </span></span></span><span><span> <span>} </span></span></span><span><span> </span><span><span></style</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> class<span>="tag tag-first"</span>></span>The moving finger writes, and having written moves on.<span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="tag tag-second"</span>></span>Nor all thy piety nor all thy wit, can cancel half a line of it.<span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Jetzt haben wir alles, was wir brauchen, um die erste Testsuite einzurichten. Phantomcss -Testsuiten werden in Form von Node.js -Skripten erstellt, in denen Sie die erforderliche Seite Ihrer Website öffnen, Screenshots machen und mit den Bildern aus dem vorherigen Lauf vergleichen. Wir beginnen mit einem einfachen Testfall, der auf der Demo von Phantomcss selbst basiert.
<span>npm init </span><span>npm install http-server --save-dev</span>
Der Test öffnet http://127.0.0.1:8080/, machen Sie einen Screenshot des Körperelements und speichern Sie ihn unter Screenshots/Body.png.
Sobald wir den Test selbst bestehen, ist es nur noch übrig, ein Skript zum Ausführen des Tests zu definieren. Fügen wir das folgende Skript zu package.json als nächstes hinzu:
<span>"scripts": { </span> <span>"start": "http-server" </span><span>},</span>
Sie können es jetzt ausführen, indem Sie den folgenden Befehl ausführen:
<span>npm install phantomcss casperjs phantomjs-prebuilt --save-dev</span>
Die Ausgabe, die Sie sehen werden, sollte ungefähr so aussehen:
<span>var phantomcss = require('phantomcss'); </span> <span>// start a casper test </span>casper<span>.test.begin('Tags', function(test) { </span> phantomcss<span>.init({ </span> <span>rebase: casper.cli.get('rebase') </span> <span>}); </span> <span>// open page </span> casper<span>.start('http://127.0.0.1:8080/'); </span> <span>// set your preferred view port size </span> casper<span>.viewport(1024, 768); </span> casper<span>.then(function() { </span> <span>// take the screenshot of the whole body element and save it under "body.png". The first parameter is actually a CSS selector </span> phantomcss<span>.screenshot('body', 'body'); </span> <span>}); </span> casper<span>.then(function now_check_the_screenshots() { </span> <span>// compare screenshots </span> phantomcss<span>.compareAll(); </span> <span>}); </span> <span>// run tests </span> casper<span>.run(function() { </span> <span>console.log('\nTHE END.'); </span> casper<span>.test.done(); </span> <span>}); </span><span>});</span>
Da Sie den Test zum ersten Mal ausgeführt haben, erstellt er nur einen neuen Basis -Screenshot und führt keinen Vergleich durch. Gehen Sie voran und schauen Sie in den Screenshots -Ordner. Sie sollten ein Bild wie dieses sehen:
Dies ist der goldene Standard dafür, wie Ihre Website aussehen soll, und zukünftige Ausführungen des Tests werden ihre Ergebnisse mit diesem Bild vergleichen.
Wenn Sie denselben Testbefehl erneut ausführen, wird berichtet, dass alle Tests erfolgreich bestanden haben:
<span>"test": "casperjs test test.js"</span>
Dies ist zu erwarten, da wir auf der Website nichts geändert haben. Lassen Sie uns etwas brechen und die Tests erneut durchführen. Versuchen Sie, einige Stile in Index.html zu ändern, um beispielsweise die Größe der Blöcke auf 400 PX zu verringern. Führen Sie nun den Test noch einmal durch und sehen, was passiert:
<span>npm test</span>
Es sind einige wichtige Dinge hier passiert. Erstens berichteten Phantomcss, dass die Tests aufgrund einer Nichtübereinstimmung für Screenshot body_0.png fehlgeschlagen waren. Die Fehlanpassung wird bei 11,41%gemessen. Zweitens wurde der Unterschied zwischen der aktuellen und der vorherigen Version im Ordner fehlerhaft gespeichert. Wenn Sie es öffnen, sehen Sie einen Screenshot wie diesen:
Der Screenshot unterstreicht bequem die veränderten Bereiche, sodass es leicht ist, den Unterschied zu erkennen.
Was sollten wir tun, um die Veränderung zu akzeptieren? Wir sollten irgendwie in der Lage sein, das Werkzeug zu sagen, dass wir uns an die reduzierte Breite der Blöcke halten und die aktuelle Ansicht als neuen Standard annehmen möchten. Dazu können Sie den Testbefehl mit einem zusätzlichen Argument -Rebas -Argument:
ausführen<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
Beachten Sie die beiden Doppelstriche. Es ist die Art und Weise von NPM, einen Parameter an den zugrunde liegenden Befehl zu übergeben. Der folgende Befehl führt also zu Casperjs -Test -Test.js -Rebase. Nachdem wir die Änderung akzeptiert haben, wird das vorherige Basisbild durch das neue ersetzt.
Jetzt, da Sie die Grundlagen haben, können Sie darüber nachdenken, dieses Tool in Ihren eigenen Workflow zu integrieren. Ich werde nicht auf die Details eingehen, da es ziemlich projektspezifisch ist, aber hier finden Sie einige Fragen, die Sie überlegen sollten:
häufig gestellte Fragen (FAQs) zu visuellen Regressionstests mit Phantomcss
Can PhantomCSS handle dynamic content?
Kann ich den Vergleichsprozess in Phantomcss anpassen? Sie können den Vergleichstyp, die Nichtübereinstimmungstoleranz und die Ausgabeinstellungen festlegen. Dies gibt Ihnen mehr Kontrolle über den Vergleichsprozess und ermöglicht es Ihnen, ihn auf Ihre spezifischen Bedürfnisse anzupassen. Visuelle Regressionstests, einschließlich Backstopjs, Wraith und Gemini. Diese Tools bieten ähnliche Funktionen wie Phantomcss, können je nach Ihren spezifischen Anforderungen unterschiedliche Stärken und Schwächen haben.
Das obige ist der detaillierte Inhalt vonVisuelle Regressionstests mit Phantomcss. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!