如何在php中实现自动功能测试

时间:2013-06-17 22:26:57

标签: php testing phpunit

我到处都读到了自动化测试的重要性。我理解其重要性,我现在将在即将开展的项目中做到这一点(我知道的有点晚了但迟到总比没有好; - )

我阅读了很多关于单元测试的内容,我知道可以使用的工具(PHPUnit是几乎所有人的首选工具)。但功能测试怎么样?我阅读了一些关于功能测试的专业文献,但是我找不到如何实现这些测试以及我可以使用哪些工具的详细描述。 有什么确切的区别?

我花了一些时间来谷歌,所以如果有人能给我一个文档的链接或推荐这个主题的书,我会很高兴。

非常感谢每一个提示; - )

谢谢

2 个答案:

答案 0 :(得分:0)

功能测试建立在使用scenarii之上。基本上有两种方法可以解决这个问题:

  1. 您可以从用例文档开始,然后定义目标设备。然后,对于每个案例/设备,您编写一个脚本,其中包含适合您环境的任何内容(对于Web,Selenium是一个非常好的选择)
  2. 当您拥有现有站点或产品时:捕获流量并重放将验证非回归的实际使用序列(从功能的角度来看)。这有点棘手,但非常强大。
  3. 请注意,这两种方法并不是不相容的,而是相互补充的。

    你想测试什么,你从什么开始?

答案 1 :(得分:0)

这取决于您要测试的内容以及编写此测试的人员。如果商务人士想要编写一些功能测试,你应该使用Behat和Selenium等工具进行ATDD方法。

如果您(我猜的开发人员)想要编写功能测试,您想要测试什么?你想检查像

这样的东西吗?
if I put 'myName' in the input 'name' and I click on the 'submit' button, 
I will be redirected to a page with 'myName' in a 'h1'

或更多:

if I send array('name' => 'myName') to MyController, 
a new user will be created in the database and i will be redirected to this user page

对于第一种方法,您应该再次使用像Selenium这样可以模拟所有用户操作的工具。这是一个非常强大和流行的工具。我认为(但这仅仅是一种意见)这种方法在UI方面具有太大的粒度,对于非回归测试而言并不适用于TDD。

我的方法是用PHPUnit编写高级测试。此测试直接调用您的路由或控制器,并检查是否遵守所有业务规则。通过这些测试,我可以解析DOM以检查页面中是否有良好的信息(以symfony crawler为例)。这个测试可以快速编写并集成到您的PHPUnit工作流中,因此很容易入手。我不知道我们是否可以将其称为“功能测试”,但他们在我的项目中扮演这个角色。

但是编写这种测试取决于你的很多框架。我使用的Laravel 4设计为可测试的,所以它非常简单,但在以前的经验中(使用FuelPHP)它是不可能的。

我希望它可以帮助你建立自己的意见。