首页 > 作文

举例详解PHP脚本的测试方法

更新时间:2023-04-06 09:09:51 阅读: 评论:0

一、常用测试示例

我们经常会遇到这种情况:将一些没有经过任何测试的遗留代码进行重新编写测试,甚至这些代码还是用面向对象写的。要对这样的代码进行测试,我的建议是把代码分解成块,这样就容易测试了。

然而,这些遗留代码并不是那么好重构的,比如:测试前,你不能在把代码重新编写,这是为了避免影响原有程序,当然也不好进行单元测试。

在php程序中,通常有一部分代码是写在几个index.php和script.php文件中的,这些.php文件存放在几个不同的文件夹里。如果不找到它们的入口点,是无法直接由web服务器访问的。

测试副本

要测试一个php脚本,我们需要模拟一个http请求,并检查返回的响应(respon)是否等于预期值。这里需要注意的是模拟一个请求,要定义respon和request,这不仅仅是内容(content)的不同,而且他们的头信息(header)也是不同的。

此外,如果我们想要测试一个操作数据的事务脚本,我们要确保不让它去连接真正的数据库或应用程序的其余部分。

在现实中,通常没有人会直接拿原有的php脚本进行重写测试。因为怕把代码弄得不可恢复。我建议使用php脚本的副本,这样我们就可以将php代码进行一些小手术了。

如何将代码进行最小修改:删除include和require语句(如果它们没有被用到),并且修改内部函数的调用方式,例如:将header()写成$object->header()。

最后,我们来测试这个事务脚本。测试完后,我们可以从副本脚本中提取出它们,并把它们放入新脚本文件中。

具体步骤

一、模拟一个http请求并重新定义变量$_get和$_post,还要修改$_rver的header。

二、获取请求响应,respon的body可以通过ob_start()和ob_get_clean()捕获,它可以收集每一个用echo()或以<?php标签输出的buffer(缓冲内容)。

注意:输出缓冲支持在php多个级别的嵌套,所以在大多数情况下,都可以捕获到,即使脚本在使用ob_*调用本身。

三、测试脚本应包含事务脚本的内部方法,因此在这个脚本范围内的方法都可以被调用。例如:
1.脚本所需的变量可以被定义为局部变量封装起来,如$connection作为一个数据库连接。
2.不是原本php的内置函数,应该加上对象来调用,如:header()写成$this->header()。

具体代码

这就是我们要测试的事务脚本对象,具体到脚本中,我们还需要封装:

<?phpclass forumposting{  private $headers = array();   public fu感性的句子nction handlerequest($postrequest)  {    $_post = $postrequest;    $connection = $this->getaconnection();    ob_start();    include 'forum/post_new_copy.php';    $content = ob_get_clean();    return array(      'content' => $content,      'headers' => $this->headers    );  }   private function header($headerline)  {    $this->headers[] = $headerline;  }     ...}

这是我们的测试代码:

 public function testanewpostiscreated(){  $action = new forumposting();  $respon = $action->handlerequest(array(    'id_thread' => 42,    'text' => 'hello, world',    ...  ));  $this->asrtequals('...', $respon['content']);  $this->asrtcontains('content-type: text/html', $respon['headers']);}

测试副本只是暂时的!它让我们编写的测试不会改变。最终,我们要将已经通过测试的php脚本进行重构,以消除冗余代码。

当我们的测试完成后,可以将handlerequest()的内容替换成真正的逻辑代码。假如你要写很多这样的测试脚本,你可以写一个通用的测试对象,以满足你的测试需要。


二、php开发者的单元测试工具包

在php领域,单元测试的工具主要有phpunit,phpunit2和simpletest三种。其中phpunit在功能上很简单,不算完善;phpunit2是专门为php5写的单元测试工具,在结构和功能上都向junit看齐;而s智商低的十种表现impletest则是一套非常实用的测试工具,其中的webtest支持对web程序界面的测试,是easy最为推荐的一款测试工具。在本文中,我们选择simpletest进行介绍。

相关知识:phpunit2也是一款很好的工具,尤其是架构上有很多值得圈点之处,希望将来能有机会在专门的文章中和大家分享。

simpletest:就是这么simple

安装simpletest很简单,上sf.net上下载一个源码包,然后解压到web目录下就可以使用了,这里就不多说。

下面我们先来看个例子:编写一个测试,检查一个网站是否可以访问。

首先我们引入要用到的文件:

代码列表:

require_once("../simpletest/unit_tester.php");require_once("../simpletest/web_tester.php");require_once("../simpletest/reporter.php");

然后我们创建一个测试类:

代码列表:

class testofsite extends webtestca{  function testofsite()  {    $this->webtestca("测试");  }  function testsite()  {    $this->get("http://howgo.net/prettyface/display.php");    $this->asrttitle(".: facebook :.");  }}

首先我们扩展了webtestca类,这样我们就可以自动获得测试web的能力,然后在构造函数中我们直接使用基类的,只是把标题传给它。接着我们就该写测试方法了,测试方法都是以‘test”开头的,用以识别在我们运行测试的时候,类中哪些方法要进行调用。

而$this->get将取得网页的内容,我们指定它的标题为 R喜庆的日子20;.: facebook :.”, 接着我们要做的就是实例化这个类的对象,并运行它。

代码列表:

$test = &new testofsite();$test->run(new htmlreporter());

下边是运行结果:

如果测试出错则会出现下边的界面:

到这里一个简单的测试就算完成了。

实战演习 – 一个login测试

下面我们进入实战桂林理工大学是一本吗,在这个基础上完成一个login的测试。这次我们先贴出完整的代码:

代码列表:

require_once("../simpletest/unit_tester.php");require_once("../simpletest/web_tester.php");require_once("../simpletest/reporter.php");class testoflogin extends webtestca{  function testoflogin()  {    $this->webtestca("login测试");  }   function testloginok()  {    // 取得页面    $this->get("http://howgo.net/prettyface/login.php");    // 添加测试表项    $this->tfield("name","easy");    $this->tfield("pass","******");    // 提交    $this->clicksubmit("提交");    // 察看提交后返回页面是否正确    $this->asrtwantedpattern("/成功登录/");    // 点击页面链接    $this->clicklink("点击这里进入管理页面");    // 察看指定页面标题和关键内容    $this->asrttitle("admin西米果cp");    $this->asrtwantedpattern("/请选择要进行的任务/");    // 退出登陆    $this->clicklink("退出管理");    $this->clicklink  }}

本文发布于:2023-04-06 09:09:09,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/7d834c1a2a022bb19a12784fc1dad559.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:举例详解PHP脚本的测试方法.doc

本文 PDF 下载地址:举例详解PHP脚本的测试方法.pdf

标签:测试   脚本   代码   副本
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图