我应该如何为将在selenium服务器上运行的Yii Web应用程序编写功能测试?

时间:2012-06-25 09:36:11

标签: selenium yii selenium-ide functional-testing htmlsuite

我目前正在为我的新项目设置一个开发环境,我正在考虑一件事。我打算使用Yii。我想让功能测试自动化,我已经有了gerrit和Jenkins,工作。

我读了this note并发现selenium有类似html套件的东西。我之前从未听说过,我总是编写我的测试来通过PHPUnit运行。我使用默认的Yii功能测试环境as described here

所以我的问题是,这两种方法的优点和缺点是什么?我已经可以想到一个html套件的pro和con。 Pro是,编写测试非常简单 - 只需在Selenium IDE中“点击”它们即可。问题是,我可能不得不在测试之前运行数据库固件,我无法更改它们,或运行它们 - 加载夹具,运行测试,加载夹具,运行测试,但我想这将使测试更多更模糊。您如何看待/您在此方面的经历是什么?

2 个答案:

答案 0 :(得分:2)

有一种简单的方法来编写功能测试。 您可以为selenium IDE下载一个插件,然后为此插件添加php formatter,您可以非常轻松地制作和导出功能测试。

然后你应该配置你的protected / config / test.php和protected / tests / bootstrap.php

你应该编辑protected / tests / phpunit.xml并删除除了fire fox之外的任何浏览器。

然后像Willem Renzema那样说并更改此插件所做的测试并将类的名称更改为WebTestCase并删除setUp()

然后你准备好进行测试了!

欢呼声

答案 1 :(得分:-1)

与Yii完美集成的两个软件包是PhPUnit和Selenium Remote Control。所以这两个在Yii开发者之间更常见。

关于部署功能测试,我不确定你想要多深,但就我用它而言,它非常简单。功能测试,实际上是php类,它们是从CWebTestCase扩展而来的。 Yii CWebTestCase class description

命名约定是您必须将类命名为以TestTest.php之类的Test结尾,并将文件存储在protected / tests / functional下。您需要设置所有内容,包括两个包,还要更改Yii配置文件和默认浏览器。如果一切顺利,样本测试可以是这样的:

class ExampleTest extends WebTestCase
{

public function testContact()
{
    $this->open('?r=site/contact');
    $this->assertTextPresent('A string on contact page');
    $this->assertElementPresent('name=ContactForm[name]');
    $this->type('name=ContactForm[name]','tester');
    $this->type('name=ContactForm[email]','tester@example.com');
    $this->type('name=ContactForm[subject]','test subject');
    $this->click("//input[@value='Submit']");
    $this->waitForTextPresent('Body cannot be blank.');
}
}

这就是我所知道的,我希望它有所帮助。