1. 简介
1.1 代码覆盖度
测试过程中一直有一个痛点,就是如果去统计测试工作的覆盖度。我们知道有用例覆盖度、需求覆盖度和代码覆盖度。其中,代码覆盖度(概念可参考这篇博文)的概念一般出现在单元测试或者白盒测试。那么怎么把代码覆盖度运用在黑盒领域中的系统测试上呢?
如果有一种工具,可以监听代码被执行的路径覆盖,是否就可以辅助我们去检查测试过程中,哪些代码条件逻辑是一次都没有被执行过的。
1.2 PHPCodeCoverage
就php语言而言,答案就是我最近了解到的 PHPCodeCoverage。
Github地址: https://github.com/cj58/PHPCodeCoverage
举个例子:
def func (status):
if status == 1:
statement1
elif status == 2:
statement2
elif status == -1:
statement3
else:
statement4
字段定义:1 有效 2无效 -1 黑名单
test case
C1 有效数据登录 预期: 可以登录
C2 无效数据登录
C3 异常传参
程序中这个函数有4条路径,测试人员用上面的功能测试用例测完了之后,就有可能遗漏黑名单这个功能点。如果有部署代码覆盖工具,那么我们查看监听结果时,可以轻松发现status==-1这个路径没走到。
在这里插入图片描述
2. 部署
2.1 安装xdebug
windows上安装xdebug需要下载的是dll组件,下载时注意php版本。
下载地址: http://www.xdebug.org/download.php
[Xdebug]
zend_extension_ts="/zend_ext/php_xdebug-2.6.0-7.1-vc14-x86_64.dll"
xdebug.auto_trace=on
xdebug.collect_params=on
xdebug.collect_return=on
xdebug.trace_output_dir="/tmp/xdebug"
xdebug.profiler_enable=on
xdebug.profiler_output_dir="/tmp/xdebug"
2.2 安装PHPCodeCoverage
下载地址: https://github.com/cj58/PHPCodeCoverage
因为后续还需要访问页面去查看代码覆盖
修改输出结果的目录,这里设置的是当前目录下的data文件夹
3使用方法
3.1 引入pcc
在 自己的php程序头部,加入这段内容。
其中include_once是上一步中PHPCOdeCoverage主程序放置的位置。而setAllMode()这个函数的作用是合并所有监听结果,去掉这句话,就是每次请求都只显示当前执行时的路径了。
include_once("../PHPCodeCoverage/Pcc.php");
$p = new Pcc('testpage');
$p->setAllMode();
$p->run();
3.2 参考demo
把这段代码copy到本地,新建为index.php。
setAllMode();
$p->run();
$status = $_GET['status'];
if ($status == 1){
echo "有效帐号";
}elseif($status == 2){
echo "无效帐号";
}elseif($status == -1){
echo "黑名单";
}else{
echo "异常";
}
?>
3.3 查看结果
http://127.0.0.1/testpage/index.php?status=1
http://127.0.0.1/testpage/index.php?status=2
http://127.0.0.1/testpage/index.php?status=3
http://127.0.0.1/PHPCodeCoverage/index.php
3.4 最终结果如图
可以看到,之前的功能测试中,我们遗漏了status=-1的情况。