PHP 开发入门自动化测试历程(一)

刻意练习,坚持

作为一名开发人员,保证代码质量是基本的素养。良好的代码规范是不错的方法,也是一直在坚持的。对代码的自动化测试,则是另一种重要的形式。这里不纠结于单元测试、接口测试、功能测试这些概念,核心是实现 自动化测试 的目标。

在这段称得上“入门”的阶段之前,也断断续续尝试了几次自动化测试的学习,但都是不了了之。究其原因,主要有两点:一是没有动手去刻意练习,只是粗略的看了文档;二是纠结要如何开始对自己代码的测试

现在的 Web开发,大都是在比较成熟的框架基础上进行。个人主要在 Laravel框架上开发,就以该框架为例记录自己“入门”的经历。( Laravel版本为 5.8 ,其它版本可能有所区别,具体查看官方文档)

认识 PHPUnit

自动化测试 就是要通过编写测试代码来对应用程序代码进行测试,为了编写更加规范、更加简介的测试代码,就产生了测试框架。

PHPUnit是面向 PHP 开发者的成熟测试框架,进行自动化测试大概率都要使用该工具,对其有一定的认识是必要的。官网地址:www.phpunit.cn/

看着官方文档上那么多章节的内容,总是容易被劝退。但刚开始并不需要掌握那么多的,核心三点:安装、编写、执行

安装 PHPUnit

有两种方式可以使用 PHPUnit

  • 一是独立下载 PHPUnit.phar 文件,然后编写批处理文件 **echo @php “%~dp0phpunit.phar” %* > phpunit.cmd** ,再加入环境变量,即可全局使用 phpunit 命令。
  • 二是在应用程序中通过 composer安装 phpunit/phpunit包,然后在应用程序根目录下就可以使用 ./vendor/bin/phpunit 命令。

具体使用哪种方式,也是跟着使用场景走,两者都用也可行。

  1. 如果只是个人简单尝试,并没有一个应用程序,当然选择第一种方式就可以了。
  2. 如果是开发过程中的接入测试,第二种方式显然更优,并且很多框架都继承了测试框架,使用会更加优雅。

编写测试

工具准备好了,接下来就是去编写测试代码,这需要遵循测试框架基本惯例和步骤:

  • 以类为单位,开始编写测试代码。测试类遵循 Test 结尾的驼峰命名
  • 测试类继承测试框架提供的抽象类 PHPUnit\Framework\TestCase (在框架中可能是其它类)
  • 类方法就是一个个测试用例,这里编写具体的测试逻辑
  • 类方法支持以 test开头的驼峰命名 或者 添加 @test 注解的蛇形命名两种形式

一个简单的测试示例:

<?php 
use PHPUnit\Framework\TestCase;   

// 测试类命名以 Test 结尾,继承 TestCase 
class ExapmleTest extends TestCase 
{  
    // 测试用例1,以 test 开头的驼峰命名  
    public function testTrue()  
    {  
        $this->assertTrue(true);  
    }    

    /**  @test 测试用例2,使用 @test 注解的蛇形命名*/  
    public function is_false()  
    {  
        $this->assertFalse(false);  
    }
}

执行测试

当我们编写好一个测试类后,就可以使用 phpunit执行相应测试了,只需要简单的在测试文件所在目录下,在命令行中执行 phpunit ExampleTest.php 即可,输出通常如下:

PHPUnit 6.5.3 by Sebastian Bergmann and contributors.   

..                                                   2 / 2 (100%) 

Time: 483 ms, Memory: 10.00MB   OK (2 test, 2 assertion)

注意上面第三行的 .字符,对于每个测试的运行, PHPUnit 都会输出一个字符来表示其执行结果,常见的三种字符如下:.表示测试通过, F表示测试中断言失败, E 表示测试中出现了错误,其它字符参考文档。

上面是执行一整个文件的全部测试,有时候只需要执行单个测试,也是可以的:

phpunit --filter testTrue ./ExapmleTest.php

更多的命令行选项,在使用过程中,根据需求查询文档获知。

参考

后续历程

本作品采用《CC 协议》,转载必须注明作者和本文链接
生于忧患,死于安乐
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

这个不说自动化测试吧?挺多是驱动测试开发

3年前 评论
Umbrella-J (楼主) 3年前
Han13in 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!