当前位置: 首页 > 后端技术 > PHP

YII2+Codeception+Xdebug接口API测试和单元测试实践

时间:2023-03-29 16:50:51 PHP

以前用测试接口用PostMan+PHPStorm+Xdebug调试。具体的,配置完PHPStorm+Xdebug后,在用PostMan发送请求时,添加参数:XDEBUG_SESSION_START=PHPSTORM。如下图:PostMan+Xdebug的测试方式基本没问题,但是测试粒度还是有点大,而且每次测试都要发送请求用postman验证结果,有点麻烦。现在新公司使用的框架是Yii2.0框架。看文档的时候发现Yii2.0框架集成了Codeception单元测试。最早的时候在网上查了一下PHP单元测试。很多高手说PHP开发基本上没有人用单元测试,所以我只是不知道,所以一直在用Postman测试。出于好奇,我也在网上看了PHP单元测试的教程。它们中的大多数是简单的Assert.equel或Assert.isEmpty。只是个空例,感觉没有意义,就放弃了。直到前天,我才认真思考单元测试能不能打印出结果而不是简单的断言,于是去研究Yii2集成的Codeception单元测试框架,但是不管是官网的文档还是来自网上网友的帖子,简单介绍一下。没有我期待的内容,只好自己努力了,才拿到货分享。必须先磨砺工具的新手可以获得帮助。首先安装CodeceptionwithComposer,Yii2官网有介绍。它使用Yii2框架的HttpClient发送http请求获取携程的Token。现在我想测试我的方法,而不是编写调用这个方法的接口,然后用PostMan测试它。首先在要测试的类的类名上右击,新建一个单元测试类,选择Codeception,选择测试方法,如下图:对象的测试类会生成在Tests目录下的unit目录,类名将test类以“Test”后缀结尾。如下图所示,我在测试方法中设置了一个断点。如图所示,在测试类的测试方法左上角有一个绿色三角按钮。单击它并选择使用Codeception进行测试。如图:点击测试后会运行到刚才打断点的地方,然后就可以从容调试单步单元测试了。最初尝试测试时,我使用Yii2的日志功能来写入日志。后来发现我从来不写日志。我也无意中发现Xdebug可以用来单步调试。经过单步调试,Codecetion调用的Logger类是自己的,虽然我配置了安装Yii2框架的Log组件,如图:Xdebug单步调试和Codeception单元测试后发现,调用Yii2的Log最后调用了Codeception包中的一个Debug类,如下图,注意类的注解,写明这个类会工作在--debug模式下(英文注释中红框)。用命令行执行单元测试,加上--debug选项,会直接打印出你要用Yii2写的日志文件的内容。如下图:本来研究的时候应该记录下来的,但是今天和老婆吵架了,心烦意乱,突然想起来尝试分享东西,然后才想起分享自己的成果前两天。图片和资料临时补上操作截图,这只是结合Yii2的单元测试。其他框架应该类似。我觉得写作还是挺有意思的,虽然第一次写东西要花很多时间。