ホームページ > バックエンド開発 > PHPチュートリアル > Phpunitでセレンを使用します

Phpunitでセレンを使用します

Christopher Nolan
リリース: 2025-02-17 08:31:09
オリジナル
358 人が閲覧しました

Phpunitでセレンを使用します

テストは、単体テスト、機能テスト、受け入れテストなど、非常に幅広いテストです。この記事では、Seleniumを使用した受け入れテストを行う方法を確認します。実用的な例を使用して、実際のユースケースを説明します。私はあなたが既にphpunitを使用して単体テストを行う方法を知っているか、少なくともそれが何であるかを把握していると思います。始めましょう。

Phpunitでセレンを使用します

キーテイクアウト

  • Seleniumは、ユーザーインターフェイステストを自動化するためのツールであり、ユーザーと同じようにWebアプリケーションと対話するテストをセットアップできます。テストをコマンドに翻訳し、それらをSeleniumサーバーに渡すことで機能します。セレンサーバーは、ネイティブAPIを使用してWebブラウザーと対話します。 PHPの単体テストフレームワークである
  • PHPunitは、受け入れテストのためにSeleniumと併用できます。この目的のために2つのクラスを提供します。SeleniumRc(現在は非推奨)のphpunit_extensions_seleniumtestcaseとSelenium webdriverのphpunit_extensions_selenium2testcase。 phpunitのデータプロバイダーは、特定のデータを反復なしでテストに供給することを可能にします。これをSeleniumと併せて使用して、Webアプリケーションがさまざまな入力にどのように応答するかをテストできます。 Seleniumは、各ブラウザベンダーが独自のドライバーを提供するドライバーアプローチを使用するため、
  • セレンテストはさまざまなブラウザーで実行できます。これにより、Webアプリケーションの包括的なクロスブラウザーテストが可能になります。
  • 受け入れテストとは何ですか?
  • 受け入れテストは、テストを通じてユーザーストーリーを伝えるプロセスであり、私はそれを説明するためにこの引用が大好きです:

システムが受け入れ基準を満たしているかどうかを判断し、顧客がシステムを受け入れるかどうかを判断できるようにするために実施された正式なテスト。

セレンとは?

Seleniumは、ユーザーインターフェイステストを自動化するためのツールです。ブラウザに対してアプリケーションをテストするのに役立ちます。このプロセスは、次のように説明できます

ページに移動しますhttp://myapp.dev/videos。

ページには20個のビデオのリストが含まれています。

ページネーションで2番をクリックします。
  • ページには20個のビデオのリストが含まれています。
  • ブラウザを終了します。
  • 「説明されたテストを使用してWebページをどのように操作しますか?」
  • 答えは「依存する」です。 Selenium RC(以前はSelenium 1という名前)を使用している場合、目的のアクションを実行するためにAuto生成されたJavaScriptコードをページに挿入します。 Selenium RCは非推奨で、メンテナンスモードでのみサポートされています。 Selenium WebDriverを使用する必要があります

    Selenium WebDriver(Selenium 2)を使用する場合、テストはコマンドに変換され、Seleniumサーバーに渡されます(すぐにそれについて詳しく説明します)。

    アプリケーションのセットアップ

    実際にテストするアプリケーションがないため、ユーザー登録ページを使用します。ユーザーは自分の情報と請求情報を入力します。すべてが良い場合、ページはすべてが良い出力です!それ以外の場合、ページには、検証エラーメッセージのリストが付いたサブスクリプションフォームが表示されます。

    Phpunitでセレンを使用しますSelenium Extensionを使用してPhPunitを使用してアプリケーションのテストを開始します。開始する前に、コンポーザーを使用してそれらをインストールしてください。

    前に、コマンドはSeleniumサーバーに渡され、ブラウザに転送されると述べました。 Seleniumサーバーをダウンロードする必要があります。これは、Javaアーカイブ実行可能ファイルにすぎません。サーバーは、Java -Jar Selenium-Server-Standalone- .jarを使用して実行できます。頻繁に使用するので、それをビンディレクトリに移動して、.bashrcまたは.zshrc。
    <span>composer require --dev phpunit/phpunit
    </span><span>composer require --dev phpunit/phpunit-selenium</span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    phpunitおよびselenium

    <span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    PHPunitは、Selenium RCとWebDriverの両方をサポートしており、その目的のために2つのクラスを提供します。 phpunit_extensions_seleniumtestcaseはRCバージョンに使用され、phpunit_extensions_selenium2testcaseはWebDriverバージョンに使用されます。したがって、テストはそれらの1つを拡張して開始する必要があります。 RCバージョンは非推奨であることを忘れないでください。以下の例では、WebDriverのものを使用します。

    セットアップ方法は、テスト環境の準備に使用されます。この場合、それを使用して、Selenium Serverがどこで実行されているか、使用するブラウザ、アプリケーションのURLをPhpunitに伝えます。 Sethostメソッドはデフォルトでlocalhostで、Setportメソッドはデフォルトで4444であるため、ここでは省略できます。ただし、これは、テストサーバーが別の異なるマシンなどからテストを実行しているときにインターネットエクスプローラーをサポートするWindowsマシン内にある場合に使用できます。

    テストが完了したときに分解方法が呼び出され、ステージをクリアするために使用されます。ブラウザを閉じて現在のセッションを終了するために使用します。

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    データプロバイダー

    phpunitデータプロバイダーを使用すると、テストを特定のデータで繰り返すことなくフィードすることができます。詳細については、ドキュメントで読むことができます。

    <span>public function tearDown()
    </span><span>{
    </span>    <span>$this->stop();
    </span><span>}</span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    InvalidInputSproviderは、1つのフィールドを除き、有効な入力のリストを返し、検証が失敗した後に予想されるエラーメッセージを渡します。

    dom要素を使用して作業

    Webページを操作する場合の1つの一般的なタスクは、要素の選択です。 PhpunitのSelenium拡張機能は、そのために本当に素晴らしいAPIを提供します。クラス名、タグ、名前、ID、CSSセレクター、XPathなどで要素を選択できます。メソッドは、PHPUNIT_EXTENSIONS_SELENIUM2TESTCASE_ELEMENTインスタンスを返します。値、要素のCSSを更新し、その他の一般的なタスクをたくさん更新します。私たちのページでは、次のようなことをするかもしれません。

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    有効なフォームの提出

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ブラウザを特定のページに向けるには、phpunit_extensions_selenium2testcaseクラスのURLメソッドを使用します。 URLは、SetBrowsErurlメソッドに提供されているURLに関連しています。したがって、ブラウザをインデックスページに向けた後、フォームに入力して送信してから、予想される成功メッセージをテストします。

    Selenium Serverが稼働していると仮定して、先に進み、phpunit Tests/Acceptance/userubscriptiontest.phpでテストを実行します。これにより、新しいブラウザセッションが作成され、フォームの記入が開始されます。私たちは、すべてが1つの成功したアサーションで合格することを期待しています。

    <span>public function tearDown()
    </span><span>{
    </span>    <span>$this->stop();
    </span><span>}</span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    テストの一部は失敗し、テスト期間が短すぎて、何がうまくいかなかったかを観察するには短すぎます。 Phpunitには、保存できるBlob画像を返すCrulentsCreenshotメソッドを使用して、失敗テストのスクリーンショットをキャプチャする機能があります。

    無効なフォームの提出Phpunitでセレンを使用します

    無効なフォームの提出は、以前の方法とほぼ同じです。フォーム入力を記入して送信します。次に、検証エラーメッセージが予想通りであることを確認します。先に述べたInvalidinputSproviderを使用します。

    <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>
    ログイン後にコピー
    bycssselectorメソッドにより、CSSセレクター(この場合はエラー段落)を使用してページから要素を取得できます。データプロバイダーメソッドからエラーメッセージフィールドを使用してエラーメッセージが予想される場合は、

    を主張します。

    フォームには、要素の選択、値の設定、フォームの送信などの基本的なインタラクションのみが含まれています。ただし、ボタンまたはリンク要素のクリックメソッドを使用して、ターゲットページが予想どおりに機能していることを確認することもできます。 >

    <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>
    ログイン後にコピー

    別のブラウザを使用して

    テストにFirefoxブラウザを使用しました。ただし、他のブラウザも使用することもできます。 Seleniumは、すべてのブラウザベンダーが独自のドライバーを提供することに取り組むドライバーアプローチを使用します。ドキュメントでサポートされているドライバーのリストを確認できます。

    Chromeブラウザを有効にするには、Chromedriverをダウンロードし、Seleniumサーバーを起動するときにオプションとしてパスを指定する必要があります。

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    Phpunitでセレンを使用しますドキュメントの準備はできていますか?

    ページのコンテンツがAJAXを介してロードされ、ページの読み込みでテストを直接トリガーしたくない場合は、ページが読み込まれて要素が存在するまで待機する必要があります。

    コールバック関数は、非null値を返すまで待機し、エラーメッセージで2秒後にタイムアウトします。ルックアップ方法では要素を探し続けますが、検索間隔を指定する場合は、ImplicitWaitメソッドを使用できます。

    <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>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    結論

    この記事は、受け入れテストのためにSeleniumを使用してPhpunitを使用する簡単な紹介でした。一般に、ブラウザの自動化を必要とするものには、Seleniumを使用できます。コメントや質問がある場合は、以下にそれらを投稿してください。私はそれらに答えるために最善を尽くします。
    <span>public function tearDown()
    </span><span>{
    </span>    <span>$this->stop();
    </span><span>}</span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    phpunit

    でセレンを使用することに関するよくある質問(FAQ)

    PHPにphpunitおよびSelenium WebDriverをインストールするには、PHPにphpunitおよびSelenium WebDriverをインストールするには、PHPの依存関係管理ツールであるComposerを使用する必要があります。まず、まだ持っていない場合はコンポーザーをインストールします。次に、端末で次のコマンドを実行してphpunitをインストールします。composerrequire require dev phpunit/phpunit ^9。 Selenium webDriverの場合、コマンドを使用します。composerrequire - dev php-webdriver/webdriver。これにより、PHPプロジェクトにPHPUnitとSelenium WebDriverの両方がインストールされます。 Selenium WebDriverを使用します。テストケースでは、WebDriverコマンドを使用してブラウザと対話できます。テストケースの準備ができたら、phpunitコマンドラインツールを使用して実行できます。端末のプロジェクトディレクトリに移動してコマンドを実行するだけで、phpunit mytest.php、「mytest.php」はテストファイルの名前です。

    Seleniumを使用したPhpunitでのアサーションを使用するにはどうすればよいですか?

    さまざまなブラウザでSeleniumを使用してphpunitテストを実行するにはどうすればよいですか?

    Selenium WebDriverは、Chrome、firefoxなどの複数のブラウザーをサポートしています。 Safari、およびInternet Explorer。別のブラウザでphpunitテストを実行するには、そのブラウザ用のWebDriverの新しいインスタンスを作成する必要があります。たとえば、Firefoxを使用するには、新しいFirefoxdriverインスタンスを作成します。次に、このドライバーを使用してテストを実行できます。

    SELENIUMでPHPunitでフレームとIFRAMEを処理するにはどうすればよいですか? )WebDriverの方法。この方法では、コンテキストを別のフレームまたはiframeに切り替えることができます。フレーム内の要素との対話が完了したら、spitchto() - > defaultcontent()メソッドを使用してメインコンテンツに切り替えることができます。

    PHPunitテストでSeleniumを使用してスクリーンショットを撮影することは、WebDriverのTakeCreenshot()メソッドを使用して実行できます。このメソッドは、現在のウィンドウのスクリーンショットを採用し、PNG形式の文字列として返します。その後、この文字列をファイルに保存してスクリーンショットを作成できます。

    セレンとのphpunitでクッキーを処理するにはどうすればよいですか?

    cookieは、manage() - > getcookies()メソッドを使用してセレンとともにphpunitで処理できます。この方法は、すべてのCookieを配列として返します。 manage() - > addcookie()、manage() - > deletecookie()、およびmanage() - > deleteallcookies()メソッドを使用してCookieを操作することもできます。並行したセレン?

    Seleniumを並行したPHPunitテストを実行すると、テストスイートを大幅に高速化できます。これは、セレングリッドを使用して実現できます。これにより、複数のマシンとブラウザで同時にテストを実行できます。 Seleniumグリッドを使用するには、ハブとノードをセットアップし、WebDriverを構成してハブに接続する必要があります。

以上がPhpunitでセレンを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート