8 个 PHP 的软件质量控制工具推荐(包含 QA 工具和测试工具)
59

为了传播有质量的代码, 我们必须在编码时有测试的观念 (如果不是在做 TDD)。 然而,市面上的PHP测试工具范围太广了,很难做出选择。

这篇热门文章将会选出最受欢迎的测试工具并且它已经被更新过以便反映出2017年的 QA 工具状态。

没有测试过的代码是不完整的代码。

file

PHPUnit

PHPUnit 是一款PHP测试框架。由 Sebastian Bergmann 在 2004 年创建,现在已经是支持 PHP 7 的版本 6 。

PHPUnit 有大量不断涌现的教程, 这里的一些 你可能已经看过。

Cucumber

Cucumber 是一个根据规范创建的验收测试框架。它以生成可描述性的可阅读的直白英文文本而出名。 Cucumber 的官方 PHP 实现的版本是 Behat

file

在 SitePoint 上有个该框架的 入门教程 。下面的示例文档即出自该教程,该示例很好地表明了对于预期结果多么富有表达性。

Feature: Listing command
  In order to change the structure of the folder I am currently in
  As a UNIX user
  I need to be able see the currently available files and folders there

  Scenario: Listing two files in a directory
    Given I am in a directory "test"
    And I have a file named "foo"
    And I have a file named "bar"
    When I run "ls"
    Then I should get:
      """
      bar
      foo
      """

Atoum

wFHDfQTNv8.png

Atoum 是另一个 PHP 单元测试框架. 这是一个独立的软件包, 你可以通过 GitHub, Composer 或通过 PHAR 可执行文件来安装.

Atoum 测试非常易于使用通过使用表达方法名称和链接.

$this->integer($classInstance->myMethod())
        ->isEqualTo(10);

$this->string($classInstance->myMethod())
        ->contains("Something heppened");

你想要学习更多关于 Atoum 的 PHP 单元测试, 你可以按照这个 教程.

Selenium

Selenium 是自动浏览器测试的工具 (集成和验收测试). 它将测试转换成浏览器 API 指令并声明预期的结果. 它支持大部分可用的浏览器.

我们可以通过使用一个 PHPUnit 扩展来使用 Selenium

composer require --dev phpunit/phpunit
composer require --dev phpunit/phpunit-selenium

这里是一个简单的例子:

class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase
{
    public function testFormSubmissionWithUsername()
    {
        $this->byName('username')->value('name');
        $this->byId('subscriptionForm')->submit();
    }
}

你可以跟着这个系列来学习如果你想要学习了解更多 使用 PHPUnit 和 Selenium 测试.

Dusk

file

Laravel 的 Dusk 是另一个浏览器自动化工具. 它可以单独使用 (通过 chromedriver) 或者 Selenium. 它有一个易于使用的 API 并且包含了所有可能性的测试例如等待元素, 文件上传, 鼠标控制, 等等. 下面是一个简单的例子:

class LanguagesControllerTest extends DuskTestCase
{
    public function testCreate()
    {
        $this->browse(function (Browser $browser) {
            $user = $this->getAdminUser();

            $browser->loginAs($user)
                ->visit('/panel/core/languages')
                ->click('#add')
                ->assertPathIs('/panel/core/languages/create')
                ->type('name', 'Arabic')
                ->select('direction', 'rtl')
                ->press('Submit')
                ->assertSee('Language: Arabic')
                ->assertSee('ar')
                ->assertSee('rtl')
                ->assertSee('Language created');
        });
    }
}

你可以通过查看 这个教程 开始使用 Dusk 进行测试.

Kahlan

file

Kahlan 是一个使用了 describe-it 语法的全功能 Unit & BDD 测试框架.

describe("Positive Expectation", function() {
    it("expects that 5 > 4", function() {
        expect(5)->toBeGreaterThan(4);
    });
});

从上面的语法可以看出它与Behat测试类似. Kahlan 支持存根 以及 脱离沙盒的 mocking 并且没有任何依赖, 代码覆盖, 报告, 等等.

it("makes a instance double with a parent class", function() {
    $double = Double::instance(['extends' => 'Kahlan\Util\Text']);

    expect(is_object($double))->toBe(true);
    expect(get_parent_class($double))->toBe('Kahlan\Util\Text');
});

php_testability

最后一个包在这里我想提到的是 PHP Testability. 这是一个静态分析工具它可以告诉你程序中可测试性的问题并生成详细的报告.

该包目前还没有一个正式标签过的版本让你去依赖使用, 但你可以在开发过程中安全地使用它. 你可以通过 Composer 来安装它:

composer require edsonmedina/php_testability "dev-master"

然后像这样运行:

vendor/bin/testability . -x vendor

持续集成(CI)服务

团队间协作时的代码交付中的一个重要组成部分就是在代码合并到官方项目库之前,自动审核代码的能力。 大多数可用 CI 服务/工具 都提供了在不同平台和配置上代码测试的能力,以确保代码的安全合并。

file

有许多服务提供了很好的不同价格区间,不过你也可以使用开源工具 :

总结

引入测试文化的过程是很困难的,只能伴随实践而缓慢发展。如果在意你的代码,那就该测试它!前面的工具和资源会助你快速起步。

前面提过工具中你有过什么使用经历吗?或是我们有所遗漏?告诉我们,我们会尽力丰富这篇基本工具的列表!


Practice makes perfect.

原文地址:https://www.sitepoint.com/8-must-have-ph...

译文地址:https://laravel-china.org/topics/7936/8-...

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2
MrJing

推荐一个:Sonar 静态代码分析工具,支持多种语言

7个月前

For continuous integration, you can use Travis, which is the best one out there. This because there is no need to install it on the server to be used. You can use it for PHP continuous integration by just connecting your travis account with your server and github repo and then setting up your yml file.

2个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!