Maison >développement back-end >tutoriel php >Tests automatisés gérables et maintenables à l'aide de PHP WebDriver

Tests automatisés gérables et maintenables à l'aide de PHP WebDriver

王林
王林original
2023-06-16 10:35:581213parcourir

Dans le processus de développement logiciel, les tests automatisés sont progressivement devenus une fonctionnalité standard de l'équipe de développement. Il peut aider l'équipe de développement à trouver et à corriger les bogues plus rapidement, garantissant ainsi la qualité et la fiabilité des logiciels. Cependant, rédiger et maintenir des tests automatisés est souvent une tâche fastidieuse et complexe. Cet article explique comment utiliser PHP WebDriver pour implémenter des tests automatisés gérables et maintenables.

PHP WebDriver est une bibliothèque PHP. Il s'agit d'une implémentation du protocole WebDriver et peut être utilisée pour contrôler le navigateur. Le protocole WebDriver est un standard utilisé pour contrôler les navigateurs et peut interagir entre différents langages et plateformes.

PHP WebDriver peut gérer plusieurs types de navigateurs, fournit une plate-forme stable pour les tests et fournit une API facile à utiliser. Voici un exemple écrit en utilisant PHP WebDriver :

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();

Dans le code ci-dessus, nous créons d'abord un objet RemoteWebDriver et spécifions l'URL du service Selenium. Ensuite, nous avons visité la page d'accueil de Baidu, entré « php WebDriver » dans le champ de recherche et cliqué sur le bouton de recherche. Ensuite, nous attendons que la page se charge, obtenons les résultats de la recherche et affichons les résultats de la recherche. Finalement, nous avons fermé le navigateur.

Vous pouvez voir qu'il est facile d'écrire des scripts de test à l'aide de PHP WebDriver. Voyons comment utiliser PHP WebDriver pour écrire un test automatisé gérable et maintenable.

  1. Utiliser le modèle d'objet de page

Le modèle d'objet de page est un modèle de conception qui résume la page du navigateur en un objet. En encapsulant les éléments et le comportement de la page dans cet objet, vous facilitez l'écriture et la maintenance du code de test. Nous pouvons créer une classe BasePage pour implémenter certaines opérations de base pour toutes les pages.

<?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();
    }
}

L'exemple ci-dessus montre la structure de base d'une classe BasePage, qui contient certaines opérations de base, telles que l'ouverture d'un site Web et la fermeture du navigateur.

Ensuite, nous créons une classe SearchPage, qui est utilisée pour rechercher les pages Baidu. Dans cette classe, nous définissons une méthode de recherche capable de rechercher des mots-clés spécifiés et de renvoyer des résultats de recherche.

<?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;
    }
}

Comme mentionné ci-dessus, la classe SearchPage encapsule l'opération de recherche et fournit une méthode de recherche qui transmettra les mots-clés et effectuera la recherche. Il utilise l'API de WebDriver pour localiser les éléments de la page et manipuler les actions. La méthode getResults est utilisée pour obtenir les résultats de la recherche.

  1. Tests pilotés par les données

Les tests pilotés par les données sont une technique de test qui utilise différentes données d'entrée pour vérifier plusieurs aspects de la même fonctionnalité. Dans notre exemple, nous pouvons utiliser des tests basés sur les données pour vérifier les résultats de la recherche pour différentes entrées.

<?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'],
        ];
    }
}

Comme vous pouvez le voir, nous avons utilisé l'annotation dataProvider de PHPUnit pour générer le fournisseur de données pour la méthode de test. Dans notre exemple, nous avons transmis trois données de test : "php WebDriver", "facebook WebDriver" et "selenium WebDriver". Dans la méthode testSearch, nous instancions un objet SearchPage et exécutons la méthode de recherche avec chaque donnée de test. Nous affirmons ensuite l'exactitude des résultats de la recherche.

  1. Exécuter des tests

Exécuter des tests avec PHPUnit est très simple. Il nous suffit d'exécuter la commande suivante :

phpunit SearchTest.php

Ensuite, PHPUnit utilisera les classes et méthodes de test que nous avons fournies et rapportera les résultats du test.

Résumé

Dans cet article, nous avons appris à utiliser PHP WebDriver pour réaliser des tests automatisés gérables et maintenables. Nous avons présenté les concepts de base du modèle d'objet de page et des tests basés sur les données, et avons démontré, à l'aide d'un exemple de code, comment utiliser PHP WebDriver pour implémenter ces méthodes. J'espère que cet article vous aidera à mieux comprendre les principes et les pratiques des tests automatisés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn