phpstorm配置phpunit单元测试及PHPunit断言函数

PHPunit安装及配置

项目中引入PHPunit

composer require phpunit/phpunit

安装PHPunit脚本

下载跟当前PHP版本兼容的phpunit.phar

phpstorm里配置好脚本路径
phpstorm中Languages & Frameworks > PHP > Test Frameworks

在这里插入图片描述

配置phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--bootstrap指定启动测试时, 先加载vendor/autoload.php-->
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">

    <!--testsuite指定测试文件的目录-->
    <testsuite name = "aaa">
        <directory suffix="Test.php">tests</directory>
    </testsuite>
</phpunit>执行单元测试

xml 解释

bootstrap="./vendor/autoload.php"

在测试之前加载的的PHP 文件,一般可以做一个初始化工作


<testsuite name="actionsuitetest">
      <directory suffix=".php">action</directory>
      <file>Order.php</file>
</testsuite>

测试套件,如果想测试页面,action,model 可以多加几个测试套件

name: 套件名称

directory :套件测试的目录,目录下一般放测试文件的用例

       suffix :测试文件后缀,如果不填写,则默认后缀为*Test.php,即phpunit 默认会执行*Test.php  的文件

       action:测试目录名

file:可以单独设置测试文件

exclude:排除不需要测试的文件

<filter> 元素及其子元素用于配置代码覆盖率报告所使用的白名单。
blacklist 黑名单(不需要统计覆盖率的文件),whitelist 白名单(统计覆盖率的测试文件) 当黑名单与白名单文件重复时,白名单起作用

<logging> 元素及其 <log> 子元素用于配置测试执行期间的日志记录。

单元测试编写

测试类继承PHPUnit\Framework\TestCase
类名以Test为后缀,可以在phpunit.xml中设置
测试方法必须为public,以test为前缀

tests目录下新建一个类BaseTest.php
如下示例,断言1+1 和2是否想等

<?php
namespace tests;
class BaseTest extends \PHPUnit\Framework\TestCase
{

    public function testA()
    {
        $this->assertEquals(1+1, 2);// assertEquals()用来对实际值与预期值的匹配做出断言
    }
}

执行单元测试

单个方法执行

方法名上右键 run testAAA即可,执行结果显示在最底部
在这里插入图片描述

单个文件或类执行

类名上右键执行
在这里插入图片描述

全部执行

phpunit.xml 上右键
在这里插入图片描述

接口单元测试方法

socket接口

以websocket为列,介绍下编写测试方法来测试接口是否符合预期

BaseTest作为基类,里面提供网络请求方法request连接websocket接口

<?php
namespace tests;
class BaseTest extends \PHPUnit\Framework\TestCase
{
    private  $host = 'tcp://172.17.0.3:7273';

    public function request($param)
    {
        $client = stream_socket_client($this->host);
        if(!$client)exit("can not connect");
        fwrite($client, json_encode($param,JSON_UNESCAPED_SLASHES)."\n");
        // 读取推送结果
        $msg = fread($client, 8192);
//        $msg = '';
//        while (!feof($client)) {
//            $msg .= fread($client, 8192);
//        }
        $response = json_decode($msg,true);
        return $response;
    }






testGood.php 用于商品类的测试,该类继承BaseTest类,用来测试商品添加等操作的正确用例能否通过

t h i s − > a s s e r t E q u a l s ( this->assertEquals( this>assertEquals(res[‘code’], 0);意思是接口返回的code为0,则断言通过

<?php
namespace tests;
require_once __DIR__ . '/BaseTest.php';
class GoodTest extends BaseTest
{

    public function testList()
    {

        $param = [
            'api'=> 'm-good-list',
            'app'=> 'iphone',
            'ver'=> '1.0',
            'data'=> [
            ],
        ];
        $res = $this->request($param);
        var_dump(json_encode($res));
        $this->assertEquals($res['code'], 0);
    }



    public function testAdd()
    {

        $param = [
            'api'=> 'm-good-add',
            'app'=> 'iphone',
            'ver'=> '1.0',
            'data'=> [
                'image' => [
                    'aa.com',
                    'bb.com',
                ],
                'title' => 'xxxx',
                'brief' => 'xxxx',
                'market_price' => 100,
                'price' => 100,
                'score' => 22,
                'stock' => 22,
                'content' => 'vdfgbdfhb',
            ],
        ];
        $res = $this->request($param);
        var_dump(json_encode($res));
        $this->assertEquals($res['code'], 0);
    }

http接口

http接口可以使用curl进行网络请求来测试

数据有多组时可以用注解@dataProvider指定数据源

比如

    /**
     * @dataProvider addProvider
     */
    public function testAppAdd($data)
    {

        $param = [
            'api'=> 'index/Comment/add',
            'app'=> 'iphone',
            'ver'=> '1.0',
            'data'=> $data,
        ];
        $res = $this->request($param);
        var_dump(json_encode($res));
        $this->assertEquals($res['code'], 0);
    }

    public function addProvider()
    {
        return array(
            [['lecture_id' => 1,
                'to_comment_id' => 0,
                'content' => 'hufleiwaufyhlieurhuihuifweahuifihuehuifehui',
                ]],
            [[
                'lecture_id' => 1,
                'to_comment_id' => 1,
                'content' => 'hahah2',

            ]],
            [[
                'lecture_id' => 1,
                'to_comment_id' => 2,
                'content' => 'hahah3',

            ]],
        );
    }

phpunit常用断言函数

布尔类型
方法名含义参数返回值
assertTrue断言为真
assertFalse断言为假
NULL类型
方法名含义参数返回值
assertNull断言为NULL
assertNotNull断言非NULL
数字类型
方法名含义参数返回值
assertEquals断言等于
assertNotEquals断言大于
assertGreaterThan断言不等于
assertGreaterThanOrEqual断言大于等于
assertLessThan断言小于
assertLessThanOrEqual断言小于等于
字符类型
方法名含义参数返回值
assertEquals断言等于
assertNotEquals断言不等于
assertContains断言包含
assertNotContains断言不包含
assertContainsOnly断言小于
assertLessThanOrEqual断言只包含
assertNotContainsOnly断言不只包含
数组类型
方法名含义参数返回值
assertEquals断言等于
assertNotEquals断言不等于
assertArrayHasKey断言有键
assertArrayNotHasKey断言没有键
assertContains断言包含
assertNotContains断言不包含
assertContainsOnly断言只包含
assertNotContainsOnly断言不只包含
对象类型
方法名含义参数返回值
assertAttributeContains断言属性包含
assertAttributeContainsOnly断言属性只包含
assertAttributeEquals断言属性等于
assertAttributeGreaterThan断言属性大于
assertAttributeGreaterThanOrEqual断言属性大于等于
assertAttributeLessThan断言属性小于
assertAttributeLessThanOrEqual断言属性小于等于
assertAttributeNotContains断言不包含
assertAttributeNotContainsOnly断言属性不只包含
assertAttributeNotEquals断言属性不等于
assertAttributeNotSame断言属性不相同
assertAttributeSame断言属性相同
assertSame断言类型和值都相同
assertNotSame断言类型或值不相同
assertObjectHasAttribute断言对象有某属性
assertObjectNotHasAttribute断言对象没有某属性
class类型
方法名含义参数返回值
assertClassHasAttribute断言类有某属性
assertClassHasStaticAttribute断言类有某静态属性
assertClassNotHasAttribute断言类没有某属性
assertClassNotHasStaticAttribute断言类没有某静态属性
文件相关
方法名含义参数返回值
assertFileEquals断言文件内容等于
assertFileExists断言文件存在
assertFileNotEquals断言文件内容不等于
assertFileNotExists断言文件不存在
XML相关
方法名含义参数返回值
assertXmlFileEqualsXmlFile断言XML文件内容相等
assertXmlFileNotEqualsXmlFile断言XML文件内容不相等
assertXmlStringEqualsXmlFile断言XML字符串等于XML文件内容
assertXmlStringEqualsXmlString断言XML字符串相等
assertXmlStringNotEqualsXmlFile断言XML字符串不等于XML文件内容
assertXmlStringNotEqualsXmlString断言XML字符串不相等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysnownet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值