学习PHP精粹,编写高效PHP代码之自动测试
本文将对单元测试、数据库测试、系统测试、负载测试进行介绍。
一、单元测试
单元测试是测试应用程序的每一步,要确保其各个组成部分运转正常。若没有单元测试,在应用程序中找出导致错误运行的原因一般来说相当困难。
单元测试通常采用一个单元测试框架,它提供了编写和运行测试并输出结果所需要的基本结构。
一些较为常用的单元测试框架包括:
PHPUnit:http://phpunit.de/
SimpleTest:http://www.simpletest.org/
PHPT:http://qa.php.net/write-test.php
二、数据库测试
PHPUnit数据库扩展模仿了JUnit的DbUnit扩展,它是事实上的Java单元测试框架。PHPUnit数据库扩展不处理创建数据库、表或用户凭证;它在假设这些已经创建的基础上运行。
PHPUnit数据库测试参考:http://phpunit.de/manual/current/en/database.html
三、系统测试
一旦系统的各个组成部分以及与外部系统的交互已经完成测试,那么我们将要对作为一个整体的应用程序进行测试,这成为系统测试。
对于Web应用程序而言,这往往通过编写自动化测试以一个真实用户会采用的相同方式与浏览器交互来完成。
编写和执行这种测试的流行软件包是Selenium,它是一个基于Java的服务器,运行客户端连接到它,执行命令以启动浏览器并与之交互。该软件常常用于在Web应用程序内部执行一系列动作,并对最后加载的文件内容进行断言以确认其达到预期的功能。
Selenium:http://seleniumhq.org/
PHPUnit包含一个Selenium扩展,它允许这些交互得以执行。
四、负载测试
一旦应用程序工作正常,无论是其各个组成部分还是作为一个整体,我们非常有必要了解应用程序作为一个整体如何运行。
负载测试模拟一组用户的行为以确定应用程序在负载下如何表现。
接下来将介绍两种测试工具:ab、siege
1、ab测试工具
作为Apache HTTP服务器项目的组成部分,ab是一个相对简单的已开发基准测试工具,并且适用于大多数安装有Apache的环境中。
它有许多参数,我们对其如何引导测试稍加调整,其中有3个经常用到的参数:
1)-c #:每秒的并发请求数,或同时访问应用程序的用户数量。
2)-n #:要发送的请求书。
3)-t #:测试持续的以秒计算的最长时间,假设为-n 50000。
因此,举例来说,如果你想模拟一分钟内10个并发用户的行为,你可以使用如下命令:
ab -c 10 -t 60 http://localhost/phpinfo.php
ab使用参考:http://httpd.apache.org/docs/2.0/programs/ab.html
2、Siege测试工具
另一个常用的负载测试工具是Siege,它由Joe Dog软件开发。ab的负载测试限制在一个特定的URL上,而除了URL之外,Siege还可对整个应用程序进行负载测试。Siege手册介绍了它的所支持的选项。
Siege:http://www.joedog.org/siege-home/
Siege手册:http://www.joedog.org/siege-manual/