swoft自动化测试踩坑记录

作者:zarte    发布时间: 2020-09-05

swoftphpunitxdebug测试

前言

swoft项目最新版已整合phpunit,只需按照范例在/test/unit中编写单元测试用例,然后执行

/usr/local/php7/bin/php test/run.php -c phpunit.xml 

生成覆盖率报告

Error: No code coverage driver is available 说明缺少xdebug驱动,需要zend驱动方式引入

xdebug安装

首先就是最大的坑,phpunit 需要xdebug支持才能生成覆盖率报告,但是swoole不支持xdebug。但是有个sdebug项目 php.7.3以下的使用https://github.com/mabu233/sdebug/tree/sdebug版本 php.7.3以下的使用 https://github.com/swoole/sdebug版本

安装说明编译安装后在php.ini中添加

zend_extension=xdebug.so
sdebug.coverage_enable=On

这时候swoole已经可以正常运行了不会检测到xdebug, 执行php -v 查看

PHP 7.1.8 (cli) (built: Aug 28 2017 14:33:21) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Sdebug v2.6.1-dev, Copyright (c) 2002-2018, by Derick Rethans

phpunit支持sdebug

phpunit 检测的是xdebug,为了避免被swoole检测到sdebug的驱动名改为了sdebug,因此需要改变phpunit库中的部分检测代码。 1.\vendor\sebastian\environment\src\Runtime.php:174

public function hasXdebug(): bool{    
    return ($this->isPHP() || $this->isHHVM()) && \extension_loaded('Xdebug');
}
改为
public function hasXdebug(): bool{    
    return ($this->isPHP() || $this->isHHVM()) && \extension_loaded('Sdebug');
}

2.\vendor\phpunit\php-code-coverage\src\Driver\Xdebug.php:35

 if (!\extension_loaded('xdebug')) {
    throw new RuntimeException('This driver requires Xdebug');
}
 if (!\ini_get('xdebug.coverage_enable')) {
    throw new RuntimeException('xdebug.coverage_enable=On has to be set in php.ini');
}
改为
 if (!\extension_loaded('sdebug')) {
    throw new RuntimeException('This driver requires Xdebug');
}
 if (!\ini_get('sdebug.coverage_enable')) {
    throw new RuntimeException('sdebug.coverage_enable=On has to be set in php.ini');
}

ini_get有可能有错可以直接忽略它的错误

添加配置或者直接使用命令参数

修改phpunit.xml添加

<logging>
    <log type="coverage-html" target="./tests/codeCoverage"></log>
</logging>

type为报告类型可以使用coverage-text文本直接显示的方式

上一篇:  whois 信息查询原理

下一篇:  mysql order 排序字段存在重复值导致分页异常

加载更多