使用 Selenium 和 PHP 测试网站
Selenium是一个允许通过浏览器自动测试网站的应用程序,它由许多不同的组件组成。它允许创建执行某些操作的浏览器测试,然后可以在以后再次运行。需要三个组件才能允许Selenium通过PHP运行测试。这些如下:
硒IDE
Selenium服务器(以前称为SeleniumRC服务器)
带有PHPUnit_Selenium扩展的PHPUnit
第一步是下载SeleniumIDE。Selenium的这一部分允许您记录网站上的操作并运行某些测试。这些可能是确保某些文本出现在某些页面上,或者如果未登录的用户能够访问管理页面。当您第一次进入Selenium下载页面时,您会看到一大堆不同的东西,这对于第一次访问的人来说可能有点令人困惑。SeleniumIDE下载链接位于页面顶部。
当您下载SeleniumIDE时,您将获得一个名称类似于selenium-ide-1.8.1.xpi的文件,它是一个Firefox扩展。您可以通过使用Firefox打开它并允许安装扩展来安装它。在我的系统(Kubuntu)上,我可以将它从我的文件资源管理器拖到Firefox或右键单击并选择“打开方式”。重新启动Firefox后,您将在工具菜单中看到打开SeleniumIDE的选项。
安装SeleniumIDE后,您需要获取SeleniumPHPFormatters,以便您可以将Selenium测试导出到PHP。您可以在Selenium下载页面或通过在Firefox扩展库中搜索找到这些。您需要重新启动Firefox才能完成这些组件的灌输。您现在可以打开SeleniumIDE并开始创建您的测试用例。
一旦你有了一个Selenium测试用例,你就可以将它导出到一个PHPUnit测试类中,方法是转到File>ExportTestCaseAs并从这个可用格式化程序列表中选择PHP(PHPUnit)。您还会注意到将测试导出为PHP(Testing_Selenium)的选项,这是在PHPUnit中使用Selenium的不同方式,但不使用PHPUnit_Selenium扩展。当您从列表中选择PHP(PHPUnit)时,您将创建一个包含Selenium测试作为PHPUnit测试的文件。
在通过PHPUnit运行测试之前,您需要安装PHPUnit和PHPUnit_Selenium扩展。这些都可以通过pear通过以下命令完成。
pear config-set auto_discover 1 pear install pear.phpunit.de/PHPUnit pear install phpunit/PHPUnit_Selenium
您现在可以像往常一样运行PHPUnit测试文件,但您会注意到,这样做会跳过所有测试。这里发生了什么?好吧,为了运行测试,您需要运行Selenium服务器,如果没有这个,PHPUnit将优雅地跳过测试,而不是让它们失败。SeleniumServer是一个Java文件,您可以从从中获得SeleniumIDE的同一Selenium下载页面下载该文件。您可以选择将此Java文件放在方便的地方,例如/usr/local/bin。要运行服务器,请使用该命令。
java-jarselenium-server-standalone-2.24.1.jar
当您运行PHPUnit文件时,它将通过打开浏览器(默认为Firefox)并逐个运行每个命令和测试来运行您的Selenium测试。
值得研究通过SeleniumIDE导出创建的文件类型。我创建了一个Selenium测试用例,打开了#!代码,转到博客页面并确保它包含文本“博客”。这就是导出文件的样子。
setBrowser("*chrome"); $this->setBrowserUrl("http://www.hashbangcode.com/"); } public function testMyTestCase() { $this->open("/"); $this->click("link=Blog"); $this->waitForPageToLoad("30000"); $this->verifyTextPresent("Blog"); } }
您可以看到该setUp()方法设置了浏览器和要使用的URL。这样做的好处是,您只需更改一次代码即可换出开发站点的URL。如果您发现自己经常构建Drupal或WordPress站点,那么您可以创建一个测试工具来做某些事情,然后在构建它们时将这些测试放入您的项目中以确保一切正常。例如,您可能想要测试匿名者在尝试访问站点的管理页面时是否会获得访问被拒绝的页面。
您可以使用PHPUnit的变量配置设置传入全局变量。如果您创建一个名为的文件,phpunit.xml那么PHPUnit将在运行测试时自动选取它。
然后,您setUp()可以像这样从您的函数中引用此变量。
protected function setUp() { $this->setBrowser("*chrome"); $url = $GLOBALS['url']; $this->setBrowserUrl($url); }