Heim  >  Artikel  >  Backend-Entwicklung  >  Verwaltbare und wartbare automatisierte Tests mit PHP WebDriver

Verwaltbare und wartbare automatisierte Tests mit PHP WebDriver

王林
王林Original
2023-06-16 10:35:581155Durchsuche

Im Prozess der Softwareentwicklung sind automatisierte Tests nach und nach zu einem Standardmerkmal des Entwicklungsteams geworden. Es kann dem Entwicklungsteam dabei helfen, Fehler schneller zu finden und zu beheben und so die Qualität und Zuverlässigkeit der Software sicherzustellen. Allerdings ist das Schreiben und Verwalten automatisierter Tests oft eine mühsame und komplexe Aufgabe. In diesem Artikel wird erläutert, wie Sie mit PHP WebDriver verwaltbare und wartbare automatisierte Tests implementieren.

PHP WebDriver ist eine PHP-Bibliothek. Es handelt sich um eine Implementierung des WebDriver-Protokolls und kann zur Steuerung des Browsers verwendet werden. Das WebDriver-Protokoll ist ein Standard zur Steuerung von Browsern und kann zwischen verschiedenen Sprachen und Plattformen interagieren.

PHP WebDriver kann mehrere Browsertypen verarbeiten, bietet eine stabile Plattform zum Testen und bietet eine benutzerfreundliche API. Hier ist ein Beispiel, das mit PHP WebDriver geschrieben wurde:

use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverWebDriverBy;

$host = 'http://localhost:4444/wd/hub'; // Selenium server 的地址
$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());

// 访问页面
$driver->get("https://www.baidu.com/");

// 输入搜索词
$input = $driver->findElement(WebDriverBy::id('kw'));
$input->sendKeys('php webDriver');

// 点击搜索按钮
$button = $driver->findElement(WebDriverBy::id('su'));
$button->click();

// 等待页面加载完毕
$driver->wait()->until(
    WebDriverExpectedCondition::titleContains('php webDriver')
);

// 获取搜索结果
$results = $driver->findElements(WebDriverBy::cssSelector('.result h3'));

// 打印搜索结果
foreach ($results as $result) {
    echo $result->getText() . "
";
}

// 关闭浏览器
$driver->quit();

Im obigen Code erstellen wir zunächst ein RemoteWebDriver-Objekt und geben die URL des Selenium-Dienstes an. Dann besuchten wir die Baidu-Homepage, gaben „php WebDriver“ in das Suchfeld ein und klickten auf die Suchschaltfläche. Als nächstes warten wir, bis die Seite geladen ist, rufen die Suchergebnisse ab und geben die Suchergebnisse aus. Schließlich haben wir den Browser geschlossen.

Sie sehen, dass es einfach ist, Testskripte mit PHP WebDriver zu schreiben. Lassen Sie uns untersuchen, wie Sie mit PHP WebDriver einen verwaltbaren und wartbaren automatisierten Test schreiben.

  1. Verwenden Sie das Seitenobjektmuster.

Das Seitenobjektmuster ist ein Entwurfsmuster, das die Browserseite in ein Objekt abstrahiert. Indem Sie die Elemente und das Verhalten der Seite in dieses Objekt einkapseln, erleichtern Sie das Schreiben und Verwalten von Testcode. Wir können eine BasePage-Klasse erstellen, um einige grundlegende Operationen für alle Seiten zu implementieren.

<?php

namespace AppPage;

use FacebookWebDriverRemoteRemoteWebDriver;

class BasePage
{
    protected $driver;

    public function __construct(RemoteWebDriver $driver)
    {
        $this->driver = $driver;
    }

    public function open($url)
    {
        $this->driver->get($url);
    }

    public function close()
    {
        $this->driver->quit();
    }
}

Das obige Beispiel zeigt die Grundstruktur einer BasePage-Klasse, die einige grundlegende Vorgänge enthält, wie zum Beispiel das Öffnen einer Website und das Schließen des Browsers.

Als nächstes erstellen wir eine SearchPage-Klasse, die zum Durchsuchen von Baidu-Seiten verwendet wird. In dieser Klasse definieren wir eine Suchmethode, die nach bestimmten Schlüsselwörtern suchen und Suchergebnisse zurückgeben kann.

<?php

namespace AppPage;

use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverWebDriverBy;
use FacebookWebDriverWebDriverExpectedCondition;

class SearchPage extends BasePage
{
    private $url = 'https://www.baidu.com/';

    public function __construct(RemoteWebDriver $driver)
    {
        parent::__construct($driver);
    }

    public function search($keyword)
    {
        $this->open($this->url);

        $input = $this->driver->findElement(WebDriverBy::id('kw'));
        $input->clear();
        $input->sendKeys($keyword);
        $input->submit();

        $this->driver->wait()->until(
            WebDriverExpectedCondition::titleContains($keyword)
        );

        return $this->getResults();
    }

    private function getResults()
    {
        $elements = $this->driver->findElements(WebDriverBy::cssSelector('.result h3'));
        $results = [];

        foreach ($elements as $element) {
            $results[] = $element->getText();
        }

        return $results;
    }
}

Wie oben erwähnt, kapselt die SearchPage-Klasse den Suchvorgang und stellt eine Suchmethode bereit, die die Schlüsselwörter übergibt und die Suche durchführt. Es verwendet die API von WebDriver, um Seitenelemente zu finden und Aktionen zu manipulieren. Die getResults-Methode wird verwendet, um Suchergebnisse zu erhalten.

  1. Datengesteuertes Testen

Datengesteuertes Testen ist eine Testtechnik, die unterschiedliche Eingabedaten verwendet, um mehrere Aspekte derselben Funktion zu überprüfen. In unserem Beispiel können wir datengesteuerte Tests verwenden, um die Suchergebnisse auf verschiedene Eingaben zu überprüfen.

<?php

namespace AppTest;

use AppPageSearchPage;
use FacebookWebDriverRemoteRemoteWebDriver;

class SearchTest extends BaseTest
{
    /**
     * @dataProvider keywordProvider
     */
    public function testSearch($keyword)
    {
        $searchPage = new SearchPage($this->driver);
        $results = $searchPage->search($keyword);

        $this->assertGreaterThan(0, count($results), "Search for '$keyword' returned no results");
        $this->assertContains($keyword, implode('', $results), "Search for '$keyword' did not return relevant results");
    }

    public function keywordProvider()
    {
        return [
            ['php WebDriver'],
            ['facebook WebDriver'],
            ['selenium WebDriver'],
        ];
    }
}

Wie Sie sehen können, haben wir die dataProvider-Annotation von PHPUnit verwendet, um den Datenprovider für die Testmethode zu generieren. In unserem Beispiel haben wir drei Testdaten übergeben: „php WebDriver“, „facebook WebDriver“ und „selenium WebDriver“. In der testSearch-Methode instanziieren wir ein SearchPage-Objekt und führen die Suchmethode mit allen Testdaten aus. Wir stellen dann die Richtigkeit der Suchergebnisse sicher.

  1. Tests ausführen

Tests mit PHPUnit auszuführen ist sehr einfach. Wir müssen nur den folgenden Befehl ausführen:

phpunit SearchTest.php

Dann verwendet PHPUnit die von uns bereitgestellten Testklassen und -methoden und meldet die Ergebnisse des Tests.

Zusammenfassung

In diesem Artikel haben wir gelernt, wie man PHP WebDriver verwendet, um verwaltbare und wartbare automatisierte Tests zu erreichen. Wir stellten die grundlegenden Konzepte des Seitenobjektmusters und des datengesteuerten Testens vor und demonstrierten anhand von Beispielcode, wie man PHP WebDriver zur Implementierung dieser Methoden verwendet. Ich hoffe, dieser Artikel hilft Ihnen, die Prinzipien und Praktiken automatisierter Tests besser zu verstehen.

Das obige ist der detaillierte Inhalt vonVerwaltbare und wartbare automatisierte Tests mit PHP WebDriver. 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