YII集成了单元测试和功能测试,借助phpunit和selenium实现。笔者在配置过程中遇到了不少麻烦,纪录在此。
必要概念
selenium
selenium是个著名的自动化测试工具,可以调起本地的浏览器来完成测试,所以可以用来自动化测试web项目。selenium分为服务端和客户端,服务端使用java开发,所以需要一个jdk,服务端在启动时,会启动一个http服务,客户端通过与服务端进行http通信,向服务端发起测试请求,服务端会自动调起浏览器完成测试。测试人员负责编写客户端脚本,支持大部分主流的编程语言,当然实际上这是由于开源社区强大的威力,为不同的语言开发了针对selenium的接口程序而已,服务端和客户端之间的协议笔者并没有研究,因为这并不重要。
phpunit
phpunit是php语言的测试框架和工具,在进行单元测试的时候是使用它的框架,在进行功能测试的时候是使用它的工具。基于这个测试框架,有人在此基础上做了selenium的php接口程序,作为phpunit的扩展存在。
YII框架如何集成
Yii在phpunit的基础上,为测试做了一些简单的封装。因此,使用Yii来进行测试的时候,需要依赖上述两者。
环境安装
Firefox
selenium-server能够识别的浏览器并不多,似乎是IE和Firefox,所以在OSX上先安装好Firefox浏览器。安装浏览器跟一般的软件安装没有大的区别,这里不累述了。
JDK
由于selenium-server是使用java开发的,我们需要先安装好JDK,百度搜索JDK下载安装即可。不再累述。
selenium-server
首先来安装selenium的server版本。在osx下,可以使用brew来安装,比较方便:
$ brew install selenium-server-standalone
由于selenium-server的源在googleapis上,所以需要翻墙才能进行操作,事实上,如果不翻墙,其他步骤也比较困难。
安装完成后的提示:
To have launchd start selenium-server-standalone at login: ln -sfv /usr/local/opt/selenium-server-standalone/*.plist ~/Library/LaunchAgents Then to load selenium-server-standalone now: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.selenium-server-standalone.plist Or, if you don't want/need launchctl, you can just run: selenium-server -p 4444
这里明确告诉我们通过如下命令来启动服务端
$ selenium-server -p 4444
正如所见,通常selenium-server侦听4444端口,如果希望修改端口,那么相应的Yii处需要修改一下配置。
phpunit
弯路
个人理解,phpunit是一个工具和框架的集合,工具归工具,框架归框架。从官网的文档看,phpunit的工具部分,是以phar包的形式发布的,而框架部分是通过pear管理的。那么先来记录一下这两个概念。没有兴趣的可以跳过这节。
phar是一种php打包方案。也就是可以把一个php程序或者php网站打包在一起分发,甚至被作为一个功能模块调用。因此,phpunit完全可以将工具程序打包成phar,执行phar的时候,通常需要使用php命令。
$ wget https://phar.phpunit.de/phpunit.phar $ chmod +x phpunit.phar $ sudo mv phpunit.phar /usr/local/bin/phpunit $ phpunit --version PHPUnit x.y.z by Sebastian Bergmann and contributors.
用上面的命令可以下载phpunit的可执行文件,可以看到这是个phar包
pear是php扩展库的体系,因为早期php复用比较困难。编译型语言由于语法比较紧凑和严谨,比较容易复用。而php由于灵活多变,复用起来学习成本比较高,于是pear就提出了一个编程规范和分发体系来实现php的功能复用,现在似乎pear已经被composer替代了(下面会说)。不过古老的东西既然已经走过弯路了不妨记下来。
在mac下可以这么安装pear:
$ wget $ sudo php -d detect_unicode=0 go-pear.phar
可以看到,go-pear也是个phar,只不过它是一个安装pear的php脚本,使用php命令可以执行。安装过程中会提示是否要修改php.ini文件:
WARNING! The include_path defined in the currently used php.ini does not contain the PEAR PHP directory you just specified: </usr/share/pear> If the specified directory is also not in the include_path used by your scripts, you will have problems getting any PEAR packages working. Would you like to alter php.ini </etc/php.ini>? [Y/n] : Y php.ini </etc/php.ini> include_path updated. Current include path : .: Configured directory : /usr/share/pear Currently used php.ini (guess) : /etc/php.ini Press Enter to continue: The 'pear' command is now at your service at /usr/bin/pear ** The 'pear' command is not currently in your PATH, so you need to ** use '/usr/bin/pear' until you have added ** '/usr/bin' to your PATH environment variable.
从这段提示我们可以得知: