codeception的安装可以参考上一篇文章《Linux下codeception安装及使用》,地址为:https://www.cnblogs.com/cfYu/p/10388584.html
安装codeception后,可以看到主要有三种现成的测试suite(套件):functional, acceptence,unit。验收测试(acceptence)与功能测试(functional)大部分相同,只有一点很大的不同:功能测试不必依赖一个运行的着的Web Server,如PhpBrowser。但是,通过试运行验收测试和功能测试,我们会发现,其中的大部分交互都是与前端页面元素、表单等有关,通过点击某个元素进行测试。有一个具体的场景是:当我们在实际开发中,通常是前后端分离的,我们后端如何进行接口测试呢?这时候就需要创建一个新suit:api。具体步骤如下:
1、依旧是在我们的应用程序根目录下,执行命令:
php codecepth.phar generate:suite api
然后我们就可以在tests目录下看到新生成的api套件,如图:
2、接下来我们来认识一下apiTest的一些基本信息:
1)apiTest主要有两种模式:REST和SOAP,两者的区别可参考文章http://blog.csdn.net/idafish/article/details/6308916。
2)REST模式下的配置文件如下:
(1)在web程序根目录下执行以下命令打开配置文件:
vim tests/api.suite.yml
然后在配置文件里面添加以下没有部分:
actor: ApiTester modules: enabled: - \Helper\Api - REST: url: http://www.ekwing.com //请求的url根路径 depends: PhpBrowser //依赖的框架模块,如Symfony, Laravel5, Zend等其他的框架模块 part:json //指定数据返回格式,可不填,标识xml和json均可
(2)接着我们执行以下命令来生成一个apiTest的简易类:
php codecept.phar generate:cest api raceList
然后我们可以看到tests/api/racelistCest.php,这时已经生成的简易类。
如图,_before函数是在测试之前进行初始化的,我们可以将一些公共的数据在该方法内进行初始化,每次执行测试前都会先执行该方法。tryToTest方法就是我们要添加测试代码的方法。如下图所示,我们可以添加如下代码进行测试获取racelist接口返回的信息。
由于接口请求之前都需要先登录,所以我们在_before方法里面设置了请求头,在请求头里面添加某个用户的登录cookie,从而仿造用户已登录的状态。然后,我们调用sendPost方法,第一个参数为请求的url,该url会与api.suit.yml文件的url进行拼接,形成我们请求的最终的url,第二个参数为请求需要传送的参数。然后我们通过grabDataFromResponseByJsonPath方法获取接口返回的信息。最后是两个断言方法,apiTest所有可用方法的使用可参见 https://codeception.com/docs/modules/REST.html#sendHEAD。
接着,我们通过以下命令进行测试:
php codecept.phar run api tests/api/racelistCest.php //最后的文件需要输入具体的文件路径,表示只运行该类,不写表示运行所有的apiTest
此时我们会看到报错:
[Exception] JSONPath library not installed. Please add `flow/jsonpath` to composer.json
这是因为grabDataFromResponseByJsonPath方法需要依赖库:flow/jsonpath,我们可以在composer.json文件添加该库,如下:
{ "require": { "codeception/codeception": "*", "flow/jsonpath" : "*" } }
然后执行以下命令来完成依赖库的添加:
php composer.phar update
这时我们可以重新执行测试命令:
php codecept.phar run api tests/api/racelistCest.php
此时我们可以看到测试结果如下:
这时我们可以看到该接口已经完全通过测试,其中的数据信息是由于我var_dump出来查看返回结果的。我们可以用更多的断言方法来进行测试,具体的方法可查看官方文档。