PHP脚本测试

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

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

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

  测试副本

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

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

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

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

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

  具体步骤

  一、模拟一个HTTP请求并重新定义变量$_GET和$_POST,还要修改$_SERVER的header。

  二、获取请求响应,response的body可以通过ob_start()和ob_get_clean()捕获,它可以收集每一个用echo()或以

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

  三、测试脚本应包含事务脚本的内部方法,因此在这个脚本范围内的方法都可以被调用。例如:

  1.脚本所需的变量可以被定义为局部变量封装起来,如$connection作为一个数据库连接。

  2.不是原本PHP的内置函数,应该加上对象来调用,如:header()写成$this->header()。

  具体代码

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

 

  <?php

  class ForumPosting

  {

  private $headers = array();

  public function 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();

  $response = $action->handleRequest(array(

  'id_thread' => 42,

  'text' => 'Hello, world',

  ...

  ));

  $this->assertEquals('...', $response['content']);

  $this->assertContains('Content-type: text/html', $response['headers']);

  }

 

  结论

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

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

时间: 2024-08-30 14:57:07

PHP脚本测试的相关文章

jedis操作Lua脚本测试

jedis操作lua脚本测试 Java代码 收藏代码 import static org.hamcrest.CoreMatchers.equalTo; import java.util.ArrayList; import java.util.List; import org.hamcrest.CoreMatchers; import org.hamcrest.Matcher; import org.junit.Test; import redis.clients.jedis.BinaryJedi

loadrunner录制脚本测试问题

问题描述 loadrunner录制脚本测试问题 用loadrunner录制脚本测试时Hits per Second图没有曲线图是怎么回事,大家知道的帮帮忙吧.谢谢了! 解决方案 你用的是loadrunner 11破解版吗? 破解版会有此问题,如果在曲线设置菜单中进行了操作,就绘制不出曲线图了 解决方案二: 1.当前工作环境请说明一下 2.使用的什么协议说明一下 3.如果使用的是http,有可能协议选择不合理

Linux Shell脚本测试的例子

脚本1:为root用户编写登录欢迎脚本: 1.用vi命令在/root目录是新建一个脚本文件welcome.sh,内容如下: 2.使用chmod命令给welcome.sh文件增加执行(x)权限 3.修改/root/.bash_profile文件,在root用户每次登录系统时调用welcome.sh脚本程序 #vi /root/.bash_profile添加如下内容: 4.验证:使用root用户重新登录,验证欢迎脚本的输出信息 脚本2:编写脚本程序,用来启动.停止和显示系统服务状态: 1.用vi命令

SilkTest入门快打2-编写脚本测试

在上一讲"SilkTest入门 快打系列1- 录制回放"中,我们介绍了如何建立一个简单的SilkTest 测试项目 ,用它来测试WindowsXP 自带计算器的加法功能.在上一讲中,我们使用SilkTest 的录制回放功能来产生测试用例的脚本,虽然它可以工作地很好,但是采用录制回放的方法,会有一些局限.首先,由于录制回放总是操作原生对象,没有隐藏对象的细节,从而导致每行脚本都很长,不易阅读.其次,如果待测AUT 的GUI 发生了变化,那么很可能,你需要重新录制脚本,不利于已有代码的维护

使用iosMonkey脚本测试iOS应用的稳定性

Ynm3k的iosMonkey脚本 Ynm3k是基于官方提供的UI Automation扩展的自动化测试框架. 它的基本架构和功能参见 http://wenku.baidu.com/view/a513c2779b6648d7c1c746d3.html  这里只阐述其中iosMonkey.js脚本的使用, 使用步骤: 1.打开instruments,左侧选择设备(是真机还是模拟器),然后选择Automation工具 2.选择target 3.导入脚本 4.运行设置 导入后选择脚本编辑界面 在脚本末

linux中一键测试脚本bench.sh的例子

经过几个版本的演化,一键测试脚本 bench.sh 已经几乎全面适用于各种 Linux 发行版的网络(下行)和 IO 测试. 并将测试结果以较为美观的方式显示出来. 总结一下 bench.sh 特点: 1.显示当前测试的各种系统信息: 2.取自世界多处的知名数据中心的测试点,下载测试比较全面: 3.支持 IPv6 下载测速: 4.IO 测试三次,并显示平均值. 再配合 unixbench.sh 脚本测试,即可全面测试 VPS 的性能. 使用方法: 命令1: wget -qO- bench.sh

2016及以后的自动化测试趋势 -《测试技术六月刊》

业界前沿 2016及以后的自动化测试趋势 测试自动化的博客joecolantonio.comtesttalks主持者和创始人,Joe Colantonio带来了15年的自动化测试经验,他分享了他的专业知识和预测如何从2016自动化测试的魅力中获取成功.Joe预测: 未来将是Dev + Test + Ops的模式:我们正朝着行为驱动开发(BDD)的模式发展:2020,Selenium WebDriver将成为功能测试执行标准等等.查看视频 浅谈Docker在测试领域的应用 Docker是PaaS供

用户体验研究之测试用户方法

"这是什么啊,用不明白,体验太差了!"."在哪里登录?找不到啊!"."谁知道这是个按钮可以点啊,像个图片!"在产品体验中,我们经常会听到这样那样有关产品体验的声音.而主动并客观地去发现这些问题(可用性问题)的方法之一,就是我们今天要介绍的用户研究方法之一--用户测试法. 什么是用户测试?通俗地讲,用户测试就是通过给用户制定任务,在用户执行任务的过程中,发现产品设计的不足,并为产品优化提供依据的一种方法. 通常情况下,根据目的不同,用户测试可以是定

测试运行: 使用Team System自定义测试自动化

测试软件的最佳方法不只一种.除手动测试外,根据您的具体开发环境,您可使用商业测试自动化框架.开放源代码和内部测试自动化框架,以及自定义测试自动化脚本.所有这些方法都各有优缺点. 自定义测试自动化脚本的优势是编写快捷且最为灵活.但是,可管理性是自定义测试自动化的瓶颈.超大批量的测试脚本.测试案例数据和测试结果使得测试不堪重负.幸运的是,您可使用 Visual Studio 2005 Team System 管理自定义测试自动化.我将使用一些屏幕快照对此进行解释.首先,请考虑图 1 中所示的执行测试