中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中怎么優化端到端集成測試的代碼

發布時間:2021-05-29 17:04:26 來源:億速云 閱讀:110 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關PHP中怎么優化端到端集成測試的代碼,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

概述

在這里,我們可以使用為行為驅動開發構建的工具——官方 PHP 的 Cucumber 實現——Behat。我們可以通過運行以下代碼來安裝它:

$ php composer.phar require --dev behat/behat

增加一個目標到 build.xml(在本文的第一部分中描述了 Phing 設置)

<target name="behat">
	<exec executable="bin/behat" passthru="true" checkreturn="true" />
</target>…
<target name="run" depends="phpcs,phpcpd,phan,phpspec,behat" />

然后,你應該為文件 features/price.feature 的測試創建一個規范。

Feature: Price Comparison  In order to compare prices  As a customer  I need to break the currency barrier   Scenario: Compare EUR and PLN    Given I use nbp.pl comparator    When I compare “100EUR” and “100PLN”    Then It should return some result

這個測試場景非常容易閱讀,并且應該給你一個關于該特性應該如何工作的良好印象。不幸的是,計算機通常并不真正理解人類語言,所以現在是為每一步編寫代碼的時候了。

你可以通過運行 ./bin/behat-init 來生成它的代碼模板。它應該會創建一個這樣的類:

//features/bootstrap/FeatureContext.php use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
class FeatureContext implements SnippetAcceptingContext{
	/** * Initializes context. */ public function __construct() { }
}

然后你可以執行:

$ bin/behat --dry-run --append-snippets

Behat 將自動為場景中定義的每個步驟創建函數。
現在你可以通過填充函數的主體來開始實現真正的檢查:

// features/bootstrap/FeatureContext.php
<?php
use Behat\Behat\Context\Context;
use Domain\Price;use Domain\PriceComparator;
use Infrastructure\NBPPriceConverter;
/*** Defines application features from the specific context.*/
class FeatureContext implements Context{
	/** @var PriceComparator */ 
	private $priceComparator;
	/** @var int */ 
	private $result; 
	/** * Initializes context. * 
	* Every scenario gets its own context instance.
	* You can also pass arbitrary arguments to the* context constructor through behat.yml. */
	public function __construct() { 
		
	} 
	/** * @Given I use nbp.pl comparator */ 
	public function iUseNbpPlComparator() {
		$this->priceComparator = new PriceComparator(new NBPPriceConverter());
	} 
	/** * @When I compare :price1 and :price2 */
	public function iCompareAnd($price1, $price2) {
		preg_match('/(\d+)([A-Z]+)/', $price1, $match2); 
		preg_match('/(\d+)([A-Z]+)/', $price2, $match3);
		$price1 = new Price($match2[1], $match2[2]);
		$price2 = new Price($match3[1], $match3[2]);
		$this->result = $this->priceComparator->compare($price1, $price2); 
	} 
	/** * @Then It should return some result */ 
	public function itShouldReturnSomeResult() {
		if (!is_int($this->result)) {
			throw new \DomainException('Returned value is not integer');
		} 
	}
}

最后,使用 ./bin/phing 運行所有的測試。你應該得到以下結果:

Buildfile: /home/maciej/workspace/php-testing/build.xmlMyProject > phpcs: MyProject > phpcpd: phpcpd 4.0.0 by Sebastian Bergmann.0.00% duplicated lines out of 103 total lines of code. Time: 17 ms, Memory: 4.00MB MyProject > phan: MyProject > phpspec: /  skipped: 0%  /  pending: 0%  / passed: 100%  /  failed: 0%   /  broken: 0%   /  3 examples2 specs3 examples (3 passed)15ms MyProject > behat: Feature: Price Comparison In order to compare prices As a customer I need to break the currency barrier  Scenario: Compare EUR and PLN          # features/price.feature:6   Given I use nbp.pl comparator        # FeatureContext::iUseNbpPlComparator()   When I compare "100EUR" and "100PLN" # FeatureContext::iCompareAnd()   Then It should return some result    # FeatureContext::itShouldReturnSomeResult()1 scenario (1 passed)3 steps (3 passed)0m0.01s (9.13Mb) MyProject > run: BUILD FINISHED Total time: 1.1000 second

正如你所看到的,Behat 準備了一份很好的報告,說明我們的應用程序做了什么,結果是什么。下一次,當項目經理詢問你在測試中涉及到哪些場景時,你可以給他一個 Behat 輸出!

1、測試的結構

每個測試都包括:

  • 對該場景的一些準備,用“Given”部分表示

  • “When”部分所涵蓋的一些動作

  • 一些檢查被標記為“Then”部分

每個部分都可以包含多個與“And”關鍵字連接的步驟:

Scenario: Compare EUR and PLN    Given nbp.pl comparator is available    And I use nbp.pl comparator    When I compare "100EUR" and "100PLN"    And I save the result    Then It should return some result    And the first amount should be greater

2、上下文

Behat 允許你為你的測試定義多個上下文。這意味著你可以將步驟代碼分割成多個類,并從不同的角度去測試你的場景。

你可以例如:為 web 上下文編寫代碼,它將使用你的應用程序 HTTP 控制器運行你的測試步驟。你還可以創建“domain”上下文,它將只使用 PHP API 調用來運行你的業務邏輯。通過這種方式,你可以單獨地測試業務邏輯集成,從端到端應用程序測試。

關于如何在 Behat 建立許多上下文的更多信息,請參考http://behat.org/en/latest/userguide/context.html的文檔。

3、如何使用Behat 

正如一開始所提到的,你可以使用 Behat 進行集成測試。通常情況下,你的代碼依賴于一些外部的第三方系統。當我們在第 2 部分中編寫單元測試時,我們總是假設外部依賴關系像預期的那樣工作。使用 Behat,你可以編寫測試場景,它將自動運行你的代碼,并檢查它是否正確地使用真實場景的服務。

最重要的是,Behat 對于測試系統使用的復雜的端到端場景非常有用。它允許你隱藏在一個可讀性的名字后面運行測試步驟所需的復雜代碼,并編寫一個人人都能理解的場景。

總結

從以上的文章中,你已經學習了如何在你的項目中設置六個有用的工具:

  • PHing 用于運行你的構建

  • PHPCS 用于自動檢查代碼格式

  • PHPCPD 用于檢測重復代碼的

  • Phan 用于高級靜態代碼分析

  • PHPSpec 用于單元測試

  • Behat 用于端到端和集成測試

現在,你可以向 git 提交鉤子添加 ./bin/phing,并設置持續集成來運行每個提交的測試。

關于“PHP中怎么優化端到端集成測試的代碼”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

泸州市| 中西区| 凭祥市| 平湖市| 汝南县| 舞阳县| 南漳县| 定南县| 重庆市| 太和县| 威信县| 葫芦岛市| 阜康市| 长岛县| 临沧市| 抚松县| 江永县| 临潭县| 林西县| 永修县| 湘乡市| 越西县| 延川县| 马公市| 昌平区| 成安县| 南涧| 玛多县| 米脂县| 乐山市| 资中县| 浦城县| 固阳县| 丹寨县| 佛冈县| 乌拉特后旗| 门头沟区| 岗巴县| 如皋市| 石河子市| 宜城市|