返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中怎么优化端到端集成测试的代码
  • 490
分享到

PHP中怎么优化端到端集成测试的代码

2023-06-15 07:06:17 490人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关PHP中怎么优化端到端集成测试的代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述在这里,我们可以使用为行为驱动开发构建的工具——官方 php 的 Cucumber 实现—

这篇文章将为大家详细讲解有关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{ public function __construct() { }}

然后你可以执行:

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

Behat 将自动为场景中定义的每个步骤创建函数。
现在你可以通过填充函数的主体来开始实现真正的检查:

// features/bootstrap/FeatureContext.php<?phpuse Behat\Behat\Context\Context;use Domain\Price;use Domain\PriceComparator;use Infrastructure\NBPPriceConverter;class FeatureContext implements Context{ private $priceComparator; private $result; public function __construct() { }  public function iUseNbpPlComparator() {$this->priceComparator = new PriceComparator(new NBPPriceConverter());} 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); }  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中怎么优化端到端集成测试的代码”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: PHP中怎么优化端到端集成测试的代码

本文链接: https://lsjlt.com/news/278478.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作