首頁 >後端開發 >php教程 >如何在PHP程式設計中使用Behat?

如何在PHP程式設計中使用Behat?

WBOY
WBOY原創
2023-06-12 08:39:451460瀏覽

在PHP程式設計中,Behat是一個非常有用的工具,它可以幫助程式設計師在開發過程中更好地理解業務需求,並保證程式碼的品質。在本文中,我們將介紹如何在PHP程式設計中使用Behat。

一、 Behat是什麼?

Behat是一個行為驅動開發(BDD)框架,它透過語言的描述方式(由Gherkin語種編寫的用例)與PHP程式碼耦合,從而實現了程式碼和業務需求的協同工作。使用Behat做測試,讓程式設計師從單純的語法和行為校驗,轉換為用自然語言來表達業務實例並自動驗證這些實例。 Behat完美地銜接了「客戶端」的描述需求和「服務端」的實作處理。

二、 Behat的安裝

使用composer(PHP套件管理員)來安裝Behat。在專案目錄下開啟控制台(terminal),輸入以下指令:

composer require --dev behat/behat

#提醒:--dev表示Behat是在開發中使用。如果你在生產環境使用Behat,應當不加--dev參數。

三、 寫Feature

完成安裝後,我們可以在APP_PATH/features/目錄下創建Feature:

Feature: 搜索
  我想在“首页”上搜索某个商品
  为了快捷找到我需要的商品
  我需要查询到相应结果

  Scenario: 搜索结果是正确的
    Given 我在“首页”页面
    When 我输入“水杯”作为搜索关键字
    And 我点击“搜索”按钮
    Then 我应该看到网页标题包含“水杯”

上述Gherkin語言描述了一個Feature,它包含了一組場景(Scenario),描述如何完成一次搜尋並驗證結果。

四、 配置Behat

我們需要透過設定檔config/behat.yml來定義Behat的設定選項。以下是一個簡單的設定檔:

default:
  suites:
    default:
      contexts:
        - FeatureContext
      filters:
        tags: ''
  extensions:
    BehatMinkExtension:
      base_url: "http://localhost/"
      files_path: "%paths.base%/persistent/files"
      goutte: ~
      selenium2: ~
    BehatSymfony2Extension:
      kernel:
        env: test
        debug: true

這個設定檔告訴Behat需要使用哪個Context類,並且需要使用什麼樣的瀏覽器。

五、 寫Context類別

我們需要建立一個Context類別來處理Feature中定義的步驟(steps),並呼叫所寫的測試程式碼來驗證程式碼的正確性。 Codeception和PHPUnit是一些支援Behat的測試函式庫,我們將使用PHPUnit來示範如何寫Context類別。

在APP_PATH/features/bootstrap/目錄下建立FeatureContext.php,並加入以下程式碼:

<?php

use BehatBehatContextContext;
use BehatBehatHookScopeBeforeFeatureScope;
use BehatBehatTesterExceptionPendingException;
use BehatMinkWebAssert;
use BehatMinkExtensionContextMinkContext;
use PHPUnitFrameworkAssert as PHPUnit;

class FeatureContext extends MinkContext implements Context
{
 
    public function __construct($baseUrl)
    {
        $this->baseUrl = $baseUrl;
    }
 
    /**
     * @param BeforeFeatureScope $scope
     */
    public static function setup(BeforeFeatureScope $scope)
    {
        // 配置数据库等其他代码
    }

    /**
     * @Given /^我在“(.*)”页面$/
     */
    public function 在页面($page)
    {
        $this->visitPath(sprintf('/%s', $page));
    }

    /**
     * @When /^我输入“(.*)”作为搜索关键字$/
     */
    public function 输入作为搜索关键字($keyword)
    {
        $page = $this->getPage();
        $searchForm = $page->find('css', 'form[action="/search"]');
        $searchInput = $searchForm->find('css', 'input[type="text"]');
        $searchInput->setValue($keyword);
    }

    /**
     * @When /^我点击“(.*)”按钮$/
     */
    public function 点击按钮($button)
    {
        $page = $this->getPage();
        $button = $page->find('css', sprintf('input[type="submit"][value="%s"]', $button));
        $button->click();
    }

    /**
     * @Then /^我应该看到网页标题包含“(.*?)”$/
     */
    public function 应该看到网页标题包含($expected)
    {
        PHPUnit::assertTrue(stripos($this->getSession()->getPage()->getTitle(), $expected) !== false);
    }
}

上述程式碼定義了一組步驟(steps),對Feature中定義的場景( scenario)進行了實現。

六、執行測試

在控制台中執行下列指令:

vendor/bin/behat

執行指令後,Behat會依照config/behat .yml檔案中的配置對Feature檔案進行執行。控制台可能會有一些進度條和錯誤提示,最後會列出測試的通過或失敗訊息。

在這裡,我們已經學習如何在PHP程式設計中使用Behat來完成測試。使用Behat可以提高業務程式碼的表達能力,減少開發過程中的品質問題,增強了團隊開發的協作和整體推進效率。

以上是如何在PHP程式設計中使用Behat?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn