• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

利用单元测试对PHP 代码进行检查

发布: 2009-12-24 10:58 | 作者: 不详 | 来源: 领测国际测试网采编 | 查看: 47次 | 进入软件测试论坛讨论

领测软件测试网

  对整个 PHP 应用程序进行测试的下一个步骤是对前端的超文本标记语言(HTML)界面进行测试。要进行这种测试,我们需要一个如下所示的 Web 页面。

  图 1. 测试 Web 页面

测试 Web 页面

  这个页面对两个数字进行求和。为了对这个页面进行测试,我们首先从单元测试代码开始入手。

  清单 10. TestPage.php

<?phprequire_once 'HTTP/Client.php';require_once 'PHPUnit2/Framework/TestCase.php';class TestPage extends PHPUnit2_Framework_TestCase{  function get_page( $url )  {    $client = new HTTP_Client();    $client->get( $url );    $resp = $client->currentResponse();    return $resp['body'];  }  function test_get()  {    $page = TestPage::get_page( 'http://localhost/unit/add.php' );    $this->assertTrue( strlen( $page ) > 0 );    $this->assertTrue( preg_match( '/<html>/', $page ) == 1 );  }  function test_add()  {    $page = TestPage::get_page( 'http://localhost/unit/add.php?a=10&b=20' );    $this->assertTrue( strlen( $page ) > 0 );    $this->assertTrue( preg_match( '/<html>/', $page ) == 1 );    preg_match( '/<span id="result">(.*?)<\/span>/', $page, $out );    $this->assertTrue( $out[1]=='30' );  }}?>

  这个测试使用了 PEAR 提供的 HTTP Client 模块。我发现它比内嵌的 PHP Client URL Library(CURL)更简单一点儿,不过也可以使用后者。

  有一个测试会检查所返回的页面,并判断这个页面是否包含 HTML。第二个测试会通过将值放到请求的 URL 中来请求计算 10 和 20 的和,然后检查返回的页面中的结果。

  这个页面的代码如下所示。

  清单 11. TestPage.php

<html><body><form><input type="text" name="a" value="<?php echo($_REQUEST['a']); ?>" /> +<input type="text" name="b" value="<?php echo($_REQUEST['b']); ?>" /> =<span id="result"><?php echo($_REQUEST['a']+$_REQUEST['b']); ?></span><br/><input type="submit" value="Add" /></form></body></html>

  这个页面相当简单。两个输入域显示了请求中提供的当前值。结果 span 显示了这两个值的和。 标记标出了所有区别:它对于用户来说是不可见的,但是对于单元测试来说却是可见的。因此单元测试并不需要复杂的逻辑来找到这个值。相反,它会检索一个特定 标记的值。这样当界面发生变化时,只要 span 存在,测试就可以通过。

  与前面一样,首先编写测试用例,然后创建一个失败版本的页面。我们对失败情况进行测试,然后修改页面的内容使其可以工作。结果如下:

  清单 12. 测试失败情况,然后修改页面

% phpunit TestPage.phpPHPUnit 2.2.1 by Sebastian Bergmann...Time: 0.25711488723755OK (2 tests)%

  这两个测试都可以通过,这就意味着测试代码可以正常工作。

  不过对 HTML 前端的测试有一个缺陷JavaScript。超文本传输协议(HTTP)客户机代码对页面进行检索,但是却没有执行 JavaScript。因此如果我们在 JavaScript 中有很多代码,就必须创建用户代理级的单元测试。我发现实现这种功能的最佳方法是使用 Microsoft® Internet Explorer® 内嵌的自动化层功能。通过使用 PHP 编写的 Microsoft Windows® 脚本,可以使用组件对象模型(COM)接口来控制 Internet Explorer,让它在页面之间进行导航,然后使用文档对象模型(DOM)方法在执行特定用户操作之后查找页面中的元素。

  这是我了解的对前端 JavaScript 代码进行单元测试的惟一一种方法。我承认它并不容易编写和维护,这些测试即使在对页面稍微进行改动时也很容易遭到破坏。

  编写哪些测试以及如何编写这些测试

  在编写测试时,我喜欢覆盖以下情况:

文章来源于领测软件测试网 https://www.ltesting.net/

65/6<123456>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网