Heim >Backend-Entwicklung >PHP-Tutorial >Verwenden von Selen mit Phpunit

Verwenden von Selen mit Phpunit

Christopher Nolan
Christopher NolanOriginal
2025-02-17 08:31:09363Durchsuche

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.

Verwenden von Selen mit Phpunit

Key Takeaways

  • selenium ist ein Tool zum automatischen Testen der Benutzeroberfläche, mit der Sie Tests einrichten können, die wie ein Benutzer mit Ihrer Webanwendung interagieren. Es funktioniert, indem Tests in Befehle übersetzt und an den Selenium -Server weitergegeben werden, der dann mit dem Webbrowser mit seiner nativen API interagiert.
  • Phpunit, ein Einheitstest -Framework für PHP, kann in Verbindung mit Selen für Akzeptanztests verwendet werden. Es bietet zwei Klassen für diesen Zweck: phpunit_extensions_seleniumTestcase für Selenium RC (jetzt veraltet) und phpunit_extensions_selenium2TestCase für Selenium WebDriver.
  • Datenanbieter in Phpunit ermöglichen die Fütterung spezifischer Daten in Tests ohne Iteration. Dies kann in Verbindung mit Selen verwendet werden, um zu testen, wie Ihre Webanwendung auf verschiedene Eingaben reagiert.
  • Selenium -Tests können auf verschiedenen Browsern durchgeführt werden, da Selen einen Treiberansatz verwendet, bei dem jeder Browser -Anbieter seinen eigenen Fahrer anbietet. Dies ermöglicht umfassende Cross-Browser-Tests Ihrer Webanwendung.

Was ist Akzeptanztests?

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.

Was ist Selenium?

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:

  • Gehen Sie zur Seite http://myapp.dev/videos.
  • behaupten Sie die Seite enthält eine Liste von 20 Videos.
  • Klicken Sie auf Nummer zwei in der Pagination.
  • behaupten Sie die Seite enthält eine Liste von 20 Videos.
  • Beenden Sie den Browser.

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.

Anwendungseinrichtung

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.

Verwenden von Selen mit Phpunit

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- .Jar ausgeführt werden. Da wir es häufig verwenden werden, ist es eine gute Idee, es in ein Bin -Verzeichnis zu verschieben und einen Alias ​​dafür in unserem .bashrc oder .zshrc zu machen.

<span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>
phpunit und selen

phpunit unterstützt sowohl Selenium RC als auch Webdriver und bietet zwei Klassen für diesen Zweck. Die Phpunit_extensions_seleniumTestCase wird für die RC -Version verwendet, und die Phpunit_extensions_selenium2TestCase wird für die Webdriver -Version verwendet. Ihr Test muss also einen von ihnen erweitern, um loszulegen. Bitte denken Sie daran, dass die RC -Version veraltet ist, also verwenden wir den Webdriver in unserem Beispiel unten.

<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

Phpunit -Datenanbieter ermöglichen es uns, unsere Tests mit spezifischen Daten zu füttern, ohne darüber zu iterieren. Sie können mehr in der Dokumentation lesen.

<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.

Verwenden von Selen mit Phpunit

Arbeiten mit DOM -Elementen

arbeiten

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>

gültige Formulareingabe

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.

Verwenden von Selen mit Phpunit

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>

Ungültige Formulareingabe

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.

Verwenden von Selen mit Phpunit

Verwenden Sie einen anderen Browser

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>

Verwenden von Selen mit Phpunit

Ist das Dokument bereit?

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>

Schlussfolgerung

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.

häufig gestellte Fragen (FAQs) zur Verwendung von Selen mit Phpunit

Wie installiere ich Phpunit und Selenium WebDriver in PHP? Installieren Sie zuerst den Komponisten, wenn Sie es noch nicht getan haben. Führen Sie dann den folgenden Befehl in Ihrem Terminal aus, um Phpunit zu installieren: Komponist benötigt -Dev Phpunit/Phpunit ^9. Verwenden Sie für Selenium WebDriver den Befehl: Composer benötigt-Dev Php-WebDriver/WebDriver. Dadurch werden sowohl Phpunit- als auch Selenium -Webdriver in Ihrem PHP -Projekt installiert. Dadurch verwendet Selen Webdriver. In Ihrem Testfall können Sie Webdriver -Befehle verwenden, um mit dem Browser zu interagieren. Sobald Ihr Testkoffer fertig ist, können Sie es mit dem Befehlszeilen-Tool von Phpunit ausführen. Navigieren Sie einfach zu Ihrem Projektverzeichnis im Terminal und führen Sie den Befehl aus: phpunit myTest.php, wobei "myTest.php" der Name Ihrer Testdatei ist.

Wie verwende ich Behauptungen in Phpunit mit Selen? Sie sind wichtig, um festzustellen, ob ein Test bestanden oder gescheitert ist. In einem Phpunit -Test mit Selen können Sie Behauptungen verwenden, um den Stand der Webelemente zu überprüfen. Sie können beispielsweise behaupten, dass ein bestimmtes Element vorhanden, sichtbar ist oder einen bestimmten Text enthält. Dazu können Sie die von Phpunit bereitgestellten Assert -Methoden verwenden, z. B. AssertEquals, AssertRue oder AssertContains. Phpunit mit Selen wird mit den Sitzungsmethoden des Webdrivers durchgeführt. Wenn Sie eine neue Instanz des Webdrivers erstellen, wird eine neue Browser -Sitzung gestartet. Sie können mit dieser Sitzung mit verschiedenen Methoden wie navigate (), refresh () oder close () interagieren. Um die Sitzung zu beenden, können Sie die Methode Quit () verwenden, die alle Fenster schließt und die Sitzung beendet. In Phpunit mit Selen können Sie schwierig sein, da Sie warten müssen, bis der AJAX -Anruf ausgeführt wird, bevor Sie mit den aktualisierten Elementen interagieren können. Selenium WebDriver bietet die WebDriverwait -Klasse für diesen Zweck. Sie können es verwenden, um zu warten, bis eine bestimmte Bedingung wahr ist, bevor Sie fortfahren. Sie können beispielsweise warten, bis ein Element sichtbar oder klickbar ist.

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.

Screenshots mit Selen in Phpunit -Tests können mit der Methode takescreenshot () des Webdrivers durchgeführt werden. Diese Methode enthält einen Screenshot des aktuellen Fensters und gibt es als Zeichenfolge im PNG -Format zurück. Sie können diese Zeichenfolge dann in einer Datei speichern, um den Screenshot zu erstellen.

Wie gehe ich in Phpunit mit Selen mit Selen um

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn