首頁 > 後端開發 > php教程 > 將硒與phpunit一起使用

將硒與phpunit一起使用

Christopher Nolan
發布: 2025-02-17 08:31:09
原創
347 人瀏覽過

將硒與phpunit一起使用

>測試是一個非常廣泛的主題,無論是單位測試,功能測試,接受測試等。在本文中,我們將了解如何使用硒進行接受測試。我將使用一個實用的示例來說明真實用例。我將假設您已經知道如何使用Phpunit進行單元測試,或者至少可以掌握一切。讓我們開始。

將硒與phpunit一起使用

鑰匙要點

  • > Selenium是自動化用戶界面測試的工具,使您可以設置與用戶一樣與Web應用程序進行交互的測試。它通過將測試轉換為命令並將其傳遞到Selenium Server來起作用,然後使用其本機API與Web瀏覽器進行交互。 PHPunit是PHP的單元測試框架,可以與硒一起用於接受測試。它為此目的提供了兩個類:phpunit_extensions_seleniumtestcase for selenium rc(現已刪除)和phpunit_extensions_selenium2testcase for selenium webdriver。 PHPUNIT中的數據提供商
  • 允許將特定數據饋入未經迭代的測試中。這可以與Selenium結合使用,以測試您的Web應用程序如何響應不同的輸入。
  • >
  • 硒測試可以在不同的瀏覽器上進行,因為硒使用了每個瀏覽器供應商提供自己的驅動程序的驅動程序方法。這允許您的Web應用程序進行全面的跨瀏覽器測試。
  • >
  • 什麼是接受測試?
  • >
接受測試是通過測試講述用戶故事的過程,我喜歡這句話來描述它:

進行正式測試,以確定係統是否滿足其接受標準,並使客戶能夠確定是否接受該系統。

什麼是硒?

硒是自動化用戶界面測試的工具。它有助於對瀏覽器測試應用程序。該過程可以像這樣描述:

訪問頁面http://myapp.dev/videos。

斷言該頁麵包含20個視頻的列表。
    >
  • 單擊分頁上的第二個。
  • 斷言該頁麵包含20個視頻的列表。
  • >
  • 退出瀏覽器。
  • >您可能想知道:“它如何使用所描述的測試來操縱網頁?”
  • 答案是“取決於”。如果您使用的是Selenium RC(先前命名為Selenium 1),則將自動生成的JavaScript代碼注入頁面以執行所需的操作。硒RC被棄用,僅在維護模式下得到支持;您應該使用Selenium webdriver。

使用Selenium Webdriver(Selenium 2)時,測試將轉換為命令並傳遞到Selenium Server(詳細介紹此信息),然後使用Web瀏覽器本機API傳遞到瀏覽器。

>應用程序設置

因為我們實際上沒有測試應用程序,所以我將使用用戶註冊頁面。用戶將輸入他的個人信息和一些計費信息。如果一切都很好,則頁面應該輸出所有內容都很好!否則,該頁面將顯示帶有驗證錯誤消息列表的訂閱表格。

>

將硒與phpunit一起使用

>我們將開始使用與硒擴展的Phpunit一起測試我們的應用程序。在開始之前,請確保使用作曲家安裝它們。

>

<span>composer require --dev phpunit/phpunit
</span><span>composer require --dev phpunit/phpunit-selenium</span>
登入後複製
登入後複製
登入後複製
>我們在將命令傳遞給硒服務器之前說,然後將它們轉發到瀏覽器。我們需要下載Selenium Server,這只是Java存檔可執行文件。可以使用Java -jar selenium-server-standalOne- .jar運行服務器。由於我們會經常使用它,因此最好將其移至bin目錄並為我們的.bashrc或.zshrc中的該目錄做一個別名。

> phpunit和硒
<span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>
登入後複製
登入後複製
登入後複製
Phpunit支持Selenium RC和WebDriver,並為此提供兩個類。 phpunit_extensions_seleniumtestcase用於RC版本,phpunit_extensions_selenium2testcase用於WebDriver版本。因此,您的測試必須擴展其中一個才能開始。請記住,RC版本正在棄用,因此我們將在下面的示例中使用WebDriver。

設置方法用於準備測試環境。在這種情況下,我們使用它來告訴phpunit我們的硒服務器在哪裡運行,我們將使用什麼瀏覽器以及應用程序的URL。 Sethost方法默認為LocalHost,SetPort方法默認為4444,因此可以在此處省略它們。但是,如果您的測試服務器在Windows機器內部,該機器在您從另一台不同的計算機運行測試時都支持Internet Explorer等。

完成測試時調用拆卸方法,用於清除階段。我們使用它來關閉瀏覽器並終止當前會話。

>
<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數據提供商

> PHPUNIT數據提供商允許我們使用特定數據提供測試,而無需迭代其測試。您可以在文檔中閱讀更多內容。

<span>public function tearDown()
</span><span>{
</span>    <span>$this->stop();
</span><span>}</span>
登入後複製
登入後複製
登入後複製

> InvalidInputSprovider返回有效輸入的列表,除一個字段外,我們在驗證失敗後傳遞了預期的錯誤消息。

與DOM Elements合作

>使用網頁時的一個常見任務是元素選擇。 Phpunit的硒擴展為此提供了非常不錯的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相對。因此,將瀏覽器指向索引頁面後,我們填寫並提交表格,然後測試預期的成功消息。

<span>public function tearDown()
</span><span>{
</span>    <span>$this->stop();
</span><span>}</span>
登入後複製
登入後複製
登入後複製
>假設您的硒服務器正在啟動並運行,請繼續使用Phpunit Tests/Accentance/userubscriptionTest.php進行測試。這將創建一個新的瀏覽器會話並開始填寫表單。我們期望一切都通過一個成功的斷言來通過。

>

將硒與phpunit一起使用

一些測試失敗,測試持續時間太短了,我們無法觀察出什麼問題。 PHPUNIT具有使用CurrentsCreenshot方法捕獲失敗測試的屏幕截圖,該方法返回了我們可以保存的斑點圖像。

<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>
登入後複製
>無效的表單提交

>無效的表單提交幾乎與先前的方法相同。我們填寫表單輸入並提交。然後,我們驗證驗證錯誤消息是否為預期。我們將使用我前面提到的無效的人。

>

<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>
登入後複製
> BYCSSSELECTOR方法允許我們使用CSS選擇器從頁面檢索元素,在這種情況下為錯誤段落。我們聲稱使用來自數據提供商方法的錯誤消息字段的錯誤消息是否如預期。 >

我們的表單僅包含基本交互,例如選擇元素,設置值,提交表單等。但是,我們還可以在按鈕或鏈接元素上使用單擊方法來驗證目標頁面是否按預期工作。 >

使用另一個瀏覽器

>我們使用Firefox瀏覽器進行測試。但是,我們也可以使用任何其他瀏覽器。硒使用驅動程序方法,每個瀏覽器供應商都在提供自己的驅動程序。您可以檢查文檔中受支持的驅動程序的列表。

>

>要啟用Chrome瀏覽器,您需要下載Chromedriver並在啟動Selenium Server時將路徑指定為選項。

<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加載的,並且您不想直接觸發頁面加載的測試,則需要等到頁面加載並存在元素。

<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>
登入後複製
登入後複製
登入後複製
>回調函數將等到我們返回非零值,並在兩秒鐘後帶有錯誤消息後超時。查找方法將不斷尋找元素,但是如果要指定搜索間隔,則可以使用隱構方法。

結論
<span>public function tearDown()
</span><span>{
</span>    <span>$this->stop();
</span><span>}</span>
登入後複製
登入後複製
登入後複製

>本文簡要介紹了與phpunit一起接受接受測試的簡要介紹。通常,您可以將硒用於需要瀏覽器自動化的任何東西。如果您有任何評論或疑問,請務必在下面發布它們,我會盡力回答它們。

經常詢問有關將硒與phpunit一起使用的問題(常見問題解答)

>如何在php?

中安裝phpunit和selenium webdriver,以在PHP中安裝PHPUNIT和Selenium Webdriver,您需要使用Composer,Composer是PHP的依賴關係管理工具。首先,如果還沒有安裝作曲家。然後,在您的終端中運行以下命令以安裝phpunit:Composer需要-DEV phpunit/phpunit ^9。對於Selenium WebDriver,請使用命令:Composer需要-DEV php-webdriver/webdriver。這將在您的php項目中同時安裝Phpunit和Selenium Webdriver。

>如何使用Selenium運行PHPUNIT測試?

使用Selenium進行Phpunit測試,您需要編寫測試案例它使用硒驅動器。在測試案例中,您可以使用WebDriver命令與瀏覽器進行交互。準備好測試用例後,您可以使用Phpunit命令行工具運行它。只需在終端中導航到您的項目目錄並運行命令:phpunit mytest.php,其中“ mytest.php”是您的測試文件的名稱。

>

>如何將phpunit中的斷言與硒中使用?它們對於確定測試是否通過還是失敗至關重要。在使用Selenium的Phpunit測試中,您可以使用斷言檢查Web元素的狀態。例如,您可以斷言存在某個元素,可見或包含特定文本。為此,您可以使用phpunit提供的斷言方法,例如assertequals,asserttrue或AspertContains。

>

>我如何使用selenium phpunit中的瀏覽器會話?使用WebDriver的會話方法完成了使用Selenium的Phpunit。當您創建WebDriver的新實例時,將啟動一個新的瀏覽器會話。您可以使用各種方法(例如navigate(),refresh()或close()與此會話進行交互。要結束會話,您可以使用Quit()方法,該方法將關閉所有窗口並結束會話。

如何使用selenium中的phpunit中的ajax請求?在使用硒的phpunit中,可能會很棘手,因為您需要等待ajax調用才能完成,然後才能與更新的元素進行交互。 Selenium WebDriver為此目的提供WebDriverWait類。您可以使用它等待某個條件在繼續之前。例如,您可以等待可見或可單擊的元素。

>

>如何在不同瀏覽器上使用Selenium運行phpunit測試?

selenium web Driver支持多個瀏覽器,包括Chrome,Firefox,Firefox,Firefox,Firefox,Firefox, Safari和Internet Explorer。要在其他瀏覽器上運行Phpunit測試,您需要為該瀏覽器創建一個新的WebDriver實例。例如,要使用Firefox,您將創建一個新的FirefoxDriver實例。然後,您可以使用此驅動程序來運行測試。

>如何使用selleenium在phpunit中使用selleenium(sellenium)處理phpunit中的幀和iframe? )WebDriver的方法。此方法使您可以將上下文切換到其他幀或iFrame。與框架內部的元素進行交互後,您可以使用switchto() - > defaultContent()方法切換回主內容。

如何在Phpunit測試中使用Selenium進行屏幕截圖?可以使用web驅動器的takeCreensHot()方法在Phpunit測試中使用Selenium進行Selenium進行屏幕截圖。此方法為當前窗口進行屏幕截圖,並將其返回為PNG格式的字符串。然後,您可以將此字符串保存到文件中以創建屏幕截圖。

我如何使用Manage() - > getCookies() - > getCookies()方法在phpunit中處理Phpunit中的cookie?此方法將所有cookie作為數組返回。您還可以使用Manage() - > AddCookie(),Manage() - > deletecookie()和Manage() - > deleteallcookies()方法來操縱cookie。並行的硒

>並行進行硒可以顯著加速您的測試套件。這可以使用硒網格來實現,這使您可以同時在多台機器和瀏覽器上運行測試。要使用Selenium Grid,您需要設置一個輪轂和節點,然後配置WebDriver以連接到集線器。

以上是將硒與phpunit一起使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板