Heim >Backend-Entwicklung >PHP-Tutorial >Verwenden von Selen mit Phpunit
Tests ist ein wirklich breites Thema, unabhängig davon, ob es sich um Unit -Tests, Funktionstests, Akzeptanztests usw. handelt. In diesem Artikel werden wir sehen, wie Sie mit Selen über Akzeptanztests führen können. Ich werde ein praktisches Beispiel verwenden, um einen echten Anwendungsfall zu veranschaulichen. Ich werde davon ausgehen, dass Sie bereits wissen, wie man mit Phpunit Tests testet, oder dass Sie zumindest das Verständnis dafür haben, worum es geht. Lassen Sie uns beginnen.
Akzeptanztest ist der Prozess des Erzählens von Benutzergeschichten durch Tests, und ich liebe dieses Zitat, um es zu beschreiben:
Ein formeller Test wurde durchgeführt, um festzustellen, ob ein System seine Akzeptanzkriterien erfüllt oder nicht, und um dem Kunden zu bestimmen, ob das System akzeptiert wird oder nicht.
selen ist ein Tool zum automatisierenden Testen der Benutzeroberfläche. Es hilft beim Testen Ihrer Bewerbung gegen den Browser. Der Prozess könnte so beschrieben werden:
Sie fragen sich vielleicht: „Wie manipuliert sie die Webseite mit den beschriebenen Tests?“
Die Antwort lautet "Es hängt davon ab". Wenn Sie Selenium RC (zuvor Selenium 1) verwenden, wird der Seite mit automatisch generiertem JavaScript -Code in die Seite der gewünschten Aktionen eingerichtet. Selenium RC ist veraltet und wird nur im Wartungsmodus unterstützt. Sie sollten Selenium Webdriver verwenden.
Bei der Verwendung von Selenium WebDriver (Selenium 2) werden die Tests in Befehle übersetzt und an den Selenium -Server übergeben (mehr dazu in einem Moment) und dann mit der nativen Webbrowser -API an den Browser weitergeleitet.
Da wir keine Anwendung zum Testen haben, werde ich eine Benutzerregistrierungsseite verwenden. Der Benutzer wird seine persönlichen Informationen und einige Abrechnungsinformationen eingeben. Wenn alles gut ist, sollte die Seite ausgeben, alles ist gut!. Andernfalls wird die Seite das Abonnementformular mit einer Liste von Validierungsfehlermeldungen angezeigt.
Wir werden unsere Anwendung mithilfe von Phpunit mit der Seleniumerweiterung testen. Stellen Sie sicher
<span>composer require --dev phpunit/phpunit </span><span>composer require --dev phpunit/phpunit-selenium</span>Wir sagten, dass die Befehle an einen Seleniumserver übergeben werden, der sie dann an den Browser weiterleitet. Wir müssen den Selenium -Server herunterladen, der nur ein ausführbares Java -Archiv ist. Der Server kann mit Java-Jar Selenium-Server-Standalone-
<span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>phpunit und selen
<span>// tests/acceptance/UserSubscriptionTest.php </span> <span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase </span><span>{ </span> <span>public function setUp() </span> <span>{ </span> <span>$this->setHost('localhost'); </span> <span>$this->setPort(4444); </span> <span>$this->setBrowserUrl('http://vaprobash.dev'); </span> <span>$this->setBrowser('firefox'); </span> <span>} </span><span>}</span>Die Setup -Methode wird zur Vorbereitung der Testumgebung verwendet. In diesem Fall verwenden wir es, um Phpunit mitzuteilen, wo unser Selenium -Server ausgeführt wird, welcher Browser wir verwenden und die URL unserer Anwendung. Die Sethost -Methode standardt für Localhost und die SetPor -Methode standardmäßig 4444, sodass sie hier weggelassen werden können. Dies kann jedoch verwendet werden, wenn sich Ihr Testserver in einem Windows -Computer befindet, der Internet Explorer unterstützt, während Sie Ihre Tests von einem anderen anderen Computer usw. ausführen.
Die Teardown -Methode wird aufgerufen, wenn die Tests durchgeführt werden, und es wird verwendet, um die Bühne zu löschen. Wir verwenden es, um den Browser zu schließen und die aktuelle Sitzung zu beenden.
<span>public function tearDown() </span><span>{ </span> <span>$this->stop(); </span><span>}</span>Datenanbieter
<span>// tests/acceptance/UserSubscriptionTest.php </span> <span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase </span><span>{ </span> <span>public function validInputsProvider() </span> <span>{ </span> <span>$inputs[] = [ </span> <span>[ </span> <span>'username' => 'younesrafie', </span> <span>'password' => 'mypassword', </span> <span>'password_confirmation' => 'mypassword', </span> <span>'email' => 'mymail@gmail.com', </span> <span>'cardHolderName' => 'RAFIE Younes', </span> <span>'cardNumber' => '378282246310005', </span> <span>'billingAddress' => 'Narjiss B Fez Morocco', </span> <span>'cvc' => '850', </span> <span>'expirationMonth' => '01', </span> <span>'expirationYear' => '2016', </span> <span>] </span> <span>]; </span> <span>return $inputs; </span> <span>} </span> <span>public static function invalidInputsProvider() </span> <span>{ </span> <span>$inputs[] = [ </span> <span>[ </span> <span>'username' => '@younesrafie', </span> <span>'password' => 'mypassword', </span> <span>'password_confirmation' => 'mypassword', </span> <span>'email' => 'mymail@gmail.com', </span> <span>'cardHolderName' => 'RAFIE Younes', </span> <span>'cardNumber' => '378282246310005', </span> <span>'billingAddress' => 'Narjiss B Fez Morocco', </span> <span>'cvc' => '850', </span> <span>'expirationMonth' => '01', </span> <span>'expirationYear' => '2016', </span> <span>], </span> <span>"Username must only contain alpha numeric characters and dashes." </span> <span>]; </span> <span>// ... </span> <span>return $inputs; </span> <span>} </span><span>}</span>Der InvalidInputSProvider gibt eine Liste gültiger Eingaben mit Ausnahme eines Feldes zurück, und wir geben die erwartete Fehlermeldung nach dem Fehlschlag der Validierung weiter.
Eine gemeinsame Aufgabe bei der Arbeit mit Webseiten ist die Elementauswahl. Die Selenium -Erweiterung von Phpunit bietet dafür eine wirklich schöne API. Sie können Elemente nach Klassenname, Tag, Name, ID, CSS -Selektor, XPath usw. auswählen Wert, Aktualisieren von Element CSS und eine Reihe anderer gängiger Aufgaben. Für unsere Seite können wir so etwas wie Folgendes tun.
<span>composer require --dev phpunit/phpunit </span><span>composer require --dev phpunit/phpunit-selenium</span>
In diesem Test wird die Eingabe des Benutzernamens ausgewählt und einen Wert festgelegt und dann das Abonnementformular eingereicht. Wir können danach eine Behauptung hinzufügen, um festzustellen, ob die Antwort wie erwartet ist. Der Seitenkörper enthält alles ist gut! Wenn die Validierung vergangen ist.
<span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>
Unser Datenanbieter enthält den Eingabennamen und den entsprechenden Wert. Wir erstellen eine separate Methode, um das Füllen der Formulareingänge zu verarbeiten und zu senden.
<span>// tests/acceptance/UserSubscriptionTest.php </span> <span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase </span><span>{ </span> <span>public function setUp() </span> <span>{ </span> <span>$this->setHost('localhost'); </span> <span>$this->setPort(4444); </span> <span>$this->setBrowserUrl('http://vaprobash.dev'); </span> <span>$this->setBrowser('firefox'); </span> <span>} </span><span>}</span>
Um den Browser auf eine bestimmte Seite zu richten, verwenden wir die URL -Methode aus der Klasse phpunit_extensions_selenium2TestCase. Die URL ist relativ zu der, die der setBrowserurl -Methode zur Verfügung gestellt wird. Nach dem Zeugnis des Browsers auf die Indexseite füllen und senden wir das Formular aus und testen Sie die erwartete Erfolgsnachricht.
<span>public function tearDown() </span><span>{ </span> <span>$this->stop(); </span><span>}</span>
Unter der Annahme, dass Ihr Selenium -Server in Betrieb ist, führen Sie Ihre Tests mit Phpunit -Tests/Akzeptanz/userSubScriptiontest.php aus. Dadurch wird eine neue Browser -Sitzung erstellt und das Formular ausfüllt. Wir erwarten, dass alles mit einer erfolgreichen Behauptung passieren wird.
Einige der Tests scheitern, und die Testdauer ist zu kurz, um zu beobachten, was schief gelaufen ist. Phpunit kann Screenshots von fehlenden Tests mithilfe der CurrentsCreenshot -Methode erfassen, die ein Blob -Bild zurückgibt, das wir speichern können.
<span>// tests/acceptance/UserSubscriptionTest.php </span> <span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase </span><span>{ </span> <span>public function validInputsProvider() </span> <span>{ </span> <span>$inputs[] = [ </span> <span>[ </span> <span>'username' => 'younesrafie', </span> <span>'password' => 'mypassword', </span> <span>'password_confirmation' => 'mypassword', </span> <span>'email' => 'mymail@gmail.com', </span> <span>'cardHolderName' => 'RAFIE Younes', </span> <span>'cardNumber' => '378282246310005', </span> <span>'billingAddress' => 'Narjiss B Fez Morocco', </span> <span>'cvc' => '850', </span> <span>'expirationMonth' => '01', </span> <span>'expirationYear' => '2016', </span> <span>] </span> <span>]; </span> <span>return $inputs; </span> <span>} </span> <span>public static function invalidInputsProvider() </span> <span>{ </span> <span>$inputs[] = [ </span> <span>[ </span> <span>'username' => '@younesrafie', </span> <span>'password' => 'mypassword', </span> <span>'password_confirmation' => 'mypassword', </span> <span>'email' => 'mymail@gmail.com', </span> <span>'cardHolderName' => 'RAFIE Younes', </span> <span>'cardNumber' => '378282246310005', </span> <span>'billingAddress' => 'Narjiss B Fez Morocco', </span> <span>'cvc' => '850', </span> <span>'expirationMonth' => '01', </span> <span>'expirationYear' => '2016', </span> <span>], </span> <span>"Username must only contain alpha numeric characters and dashes." </span> <span>]; </span> <span>// ... </span> <span>return $inputs; </span> <span>} </span><span>}</span>
Die Einreichung von ungültiger Form ist fast identisch mit der vorherigen Methode. Wir füllen die Formulareingänge aus und reichen ein. Anschließend überprüfen wir, dass die Validierungsfehlermeldung wie erwartet ist. Wir werden den früher erwähnten InvalidInputSProvider verwenden.
<span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase </span><span>{ </span> <span>public function testFormSubmissionWithUsername() </span> <span>{ </span> <span>$this->byName('username')->value('younesrafie'); </span> <span>$this->byId('subscriptionForm')->submit(); </span> <span>} </span><span>}</span>
Mit der BYCSSSelector -Methode können wir mithilfe von CSS -Selektoren ein Element von der Seite abrufen, in diesem Fall der Fehlerabsatz. Wir behaupten, ob die Fehlermeldung nach dem Feld Fehlermeldung aus der Datenanbietermethode erwartet wird.
Unser Formular enthält nur grundlegende Interaktionen wie Auswahl von Elementen, Einstellungswerte, Senden des Formulars usw. Wir können jedoch auch die Klickmethode auf einer Schaltfläche oder Linkelement verwenden, um zu überprüfen, ob die Zielseite wie erwartet funktioniert.
Wir haben den Firefox -Browser für unsere Tests verwendet. Wir können jedoch auch einen anderen Browser verwenden. Selenium verwendet den Treiberansatz, bei dem jeder Browser -Anbieter an der Bereitstellung eines eigenen Fahrers arbeitet. Sie können die Liste der unterstützten Treiber in der Dokumentation überprüfen.
Um den Chrombrowser zu aktivieren, müssen Sie den Chromedriver herunterladen und den Pfad als Option beim Starten des Selenium -Servers angeben.
<span>composer require --dev phpunit/phpunit </span><span>composer require --dev phpunit/phpunit-selenium</span>
<span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>
Wenn Ihr Seiteninhalt über AJAX geladen wird und Sie die Tests nicht direkt auf Seite geladen möchten, möchten Sie warten, bis Ihre Seite geladen ist und Ihre Elemente vorhanden sind.
<span>// tests/acceptance/UserSubscriptionTest.php </span> <span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase </span><span>{ </span> <span>public function setUp() </span> <span>{ </span> <span>$this->setHost('localhost'); </span> <span>$this->setPort(4444); </span> <span>$this->setBrowserUrl('http://vaprobash.dev'); </span> <span>$this->setBrowser('firefox'); </span> <span>} </span><span>}</span>
Die Rückruffunktion wartet, bis wir einen Nicht -Nullwert zurückgeben, und wird nach zwei Sekunden mit einer Fehlermeldung einzeitlich ausführen. Die Lookup -Methode sucht weiter nach dem Element. Wenn Sie jedoch ein Suchintervall angeben möchten, können Sie die implizite Methode verwenden.
<span>public function tearDown() </span><span>{ </span> <span>$this->stop(); </span><span>}</span>
Dieser Artikel war eine kurze Einführung in die Verwendung von Selen mit Phpunit für Akzeptanztests. Im Allgemeinen können Sie Selenium für alles verwenden, was die Browserautomatisierung erfordert. Wenn Sie Kommentare oder Fragen haben, veröffentlichen Sie sie unten und ich werde mein Bestes tun, um sie zu beantworten.
Wie kann ich Phpunit -Tests mit Selenium auf verschiedenen Browsern durchführen? Safari und Internet Explorer. Um Ihre Phpunit -Tests in einem anderen Browser durchzuführen, müssen Sie eine neue Instanz des Webdrivers für diesen Browser erstellen. Um Firefox zu verwenden, würden Sie eine neue FirefoxDriver -Instanz erstellen. Dann können Sie diesen Treiber verwenden, um Ihre Tests auszuführen. ) Methode des Webdrivers. Mit dieser Methode können Sie den Kontext in einen anderen Frame oder Iframe umstellen. Sobald Sie mit den Elementen im Rahmen interagieren, können Sie mit der Methode Switchto ()-> StandardContent () zum Hauptinhalt zurückkehren.
cookies können in Phpunit mit Selen mit der Methode "Manager ()-> getcookies () des Webdrivers gehandhabt werden. Diese Methode gibt alle Cookies als Array zurück. Sie können auch den Manager ()-> addcookie (), verwalten ()-> DeleteCookie () und verwalten ()-> DeleteAllcookies () -Methoden zur Manipulation von Cookies. Paralleles Selenium? Dies kann mit einem Selen -Gitter erreicht werden, mit dem Sie Tests auf mehreren Maschinen und Browsern gleichzeitig ausführen können. Um Selenium Grid zu verwenden, müssen Sie einen Hub und Knoten einrichten und dann Ihren Webdriver so konfigurieren, dass Sie eine Verbindung zum Hub herstellen.
Das obige ist der detaillierte Inhalt vonVerwenden von Selen mit Phpunit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!