使用 PHPUnit 和 Selenium 进行测试
openkk
13年前
<p>适用于 PHP 的 NetBeans IDE 支持 <a href="http://www.open-open.com/lib/view/open1322626665421.html" rel="nofollow">PHPUnit</a> 自动测试。通过 PHPUnit,NetBeans IDE 可为 PHP 提供代码覆盖率,这与 IDE 为 Python 和 Ruby 提供的代码覆盖率类似。测试输出将显示在功能丰富的输出窗口中,该窗口与 IDE 的 JUnit、Ruby 和 Python 测试运行器所使用的输出窗口相同。 </p> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/d8ca4504da7dd24b55d0adad2e61755c.png" width="600" height="274" /> <p>NetBeans IDE 还支持将 Selenium 可移植测试框架与 PHPUnit 结合使用。Selenium 插件可以从更新中心获取。安装此插件会将 Selenium 服务器添加到 IDE 的已注册服务器中,并将 Selenium 测试选项添加到 PHP 菜单。</p> <p><b>目录</b></p> <ul> <li><a href="/misc/goto?guid=4959498070245325175" rel="nofollow">安装 PHPUnit</a></li> <li><a href="/misc/goto?guid=4959498070344115210" rel="nofollow">创建并运行 PHPUnit 测试</a></li> <li><a href="/misc/goto?guid=4959498070426957565" rel="nofollow">测试结果和 IDE 输出</a></li> <li><a href="/misc/goto?guid=4959498070516745836" rel="nofollow">代码覆盖率</a></li> <li><a href="/misc/goto?guid=4959498070595140624" rel="nofollow">使用项目特定的配置</a></li> <li><a href="/misc/goto?guid=4959498070825172097" rel="nofollow">在 Selenium 框架上运行测试</a></li> </ul> <p><b>要学习本教程,您需要具备以下软件和资源。</b></p> <table class="ke-zeroborder"> <tbody> <tr> <th>软件或资源</th> <th>要求的版本</th> </tr> <tr> <td><a href="/misc/goto?guid=4959498070981032725" rel="nofollow">NetBeans IDE</a></td> <td>PHP 下载包</td> </tr> <tr> <td>PHP 引擎,包括 PEAR</td> <td>版本 5。 </td> </tr> <tr> <td>Web 服务器</td> <td>推荐使用 Apache HTTP Server 2.2。<br /> </td> </tr> <tr> <td>PHP 调试器</td> <td>XDebug 2.0 或更高版本</td> </tr> <tr> <td><a href="/misc/goto?guid=4959498071073418727" rel="nofollow">PHPUnit</a></td> <td>版本 3.3.0 或更高版本。</td> </tr> </tbody> </table> <h2><a name="installing-phpunit" rel="nofollow">安装 PHPUnit</a></h2> <a name="installing-phpunit" rel="nofollow"></a> <p><a name="installing-phpunit" rel="nofollow">请按照 </a><a href="/misc/goto?guid=4959498071164177263" rel="nofollow">PHPUnit 文档</a>中 所述,使用 PEAR 安装 PHPUnit。应安装 PHPUnit 版本 3.3.0 或更高版本。无需任何特殊设置。安装 PHPUnit 之后,NetBeans 便可识别它。请注意,您需要将 PEAR 随 PHP 引擎一起安装。另请注意,PHPUnit 文档中指出 PHPUnit 通常会安装到本地 PEAR 目录。该文档还给出了具体的路径:/usr/lib/php/PHPUnit;但在适用于 Windows 的 XAMPP 上,此路径为 XAMPP_HOME\php\PEAR\PHPUnit。 </p> <p>要检查 NetBeans IDE 是否可识别您的 PHPUnit 安装,请打开“工具”>“选项”(在 Mac 上,请打开“NetBeans 首选项”)并查看 "PHP" 窗口。PHPUnit 脚本的路径应显示在“PHPUnit 脚本”字段中。如果此处未显示脚本路径,请进行浏览以找到该路径。</p> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/213c869eb1834d41ec1c91efcf7a9dce.png" width="485" height="579" /> <h2><a name="create-test" rel="nofollow">创建并运行 PHPUnit 测试</a></h2> <a name="create-test" rel="nofollow"> <p>NetBeans IDE 可以对某个文件中的所有 PHP 类创建并运行 PHPUnit 测试。为确保测试生成器可以正常运行,请为 PHP 文件指定与该文件中的第一类相同的名称。 </p> <p><strong>为某个类创建并运行 PHPUnit 测试:</strong></p> </a> <ol> <a name="create-test" rel="nofollow"></a> <li><a name="create-test" rel="nofollow">创建一个名为 Calculator 的 PHP 项目。在此项目中,创建一个名为 Calculator.php 的文件。在此文件中,键入或粘贴 </a><a href="/misc/goto?guid=4959498071247264869" rel="nofollow">PHPUnit 文档的 "Skeleton Generator"(框架生成器)一章</a>中所提供的 Calculator 类。<pre class="brush:php; toolbar: true; auto-links: false;"><?php class Calculator { public function add($a, $b) { return $a + $b; } } ?></pre> <!--?php class Calculator { public function add($a, $b) { return $a + $b; } } ?--></li> <li>添加一个包含 <a href="/misc/goto?guid=4959498071326900250" rel="nofollow">@assert 标注</a>以及一些样例输入和输出的注释块。请注意,本示例中包括一个错误的断言。<pre class="brush:php; toolbar: true; auto-links: false;"><?php class Calculator { /** * @assert (0, 0) == 0 * @assert (0, 1) == 1 * @assert (1, 0) == 1 * @assert (1, 1) == 2 * @assert (1, 2) == 4 */ public function add($a, $b) { return $a + $b; } } ?></pre></li> <li>在“项目”窗口中,右键单击 "Calculator.php" 节点,然后选择“工具”>“创建 PHPUnit 测试”。请注意,您可以在“源文件”节点的上下文菜单中为项目中的所有文件创建测试。<br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/86781c43f8ea14836838290f39b9289e.png" width="453" height="647" /></li> <li>第一次创建测试时,将会打开一个对话框,询问您要存储测试文件的目录。在本示例中,使用“浏览”功能创建了 tests 目录。<br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/2d662ce1e08c78d232f2c76704996d9c.png" width="364" height="177" /></li> <li>IDE 在一个名为 CalculatorTest.php 的文件中生成框架测试类,在“项目”窗口中会显示该文件,并在编辑器中将其打开。<br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/ccd4ef08c23f6b4ca8e03e0674ff335d.png" width="204" height="245" /> <p>请注意,将为每个 @assert 标注创建一个测试。</p> <pre class="examplecode"> /** * Generated from @assert (1, 1) == 2. */ public function testAdd4() { $this->assertEquals( 2, $this->object->add(1, 1) ); }</pre></li> <li>您既可以测试单个文件,也可以测试整个项目。要测试项目,请右键单击项目的父节点,然后选择“测试”或按 Alt-F6 组合键。要测试 Calculator.php 文件,请右键单击该文件的节点,然后选择“测试”或按 Ctrl-F6 组合键。本示例只有一个文件,且该文件中只有一个类,因此两种测试结果相同。IDE 会运行测试并在“测试结果”窗口中显示结果。 <br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/39b28e92227151eed71fff66d5e7d2b8.png" width="534" height="268" /> <p>测试结果的更详细文本版本会显示在“输出”窗口中。</p> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/4f0fd4cbe1dba0efdcaa551f4e23d0e7.png" width="535" height="269" /></li> </ol> <h2><a name="result-windows" rel="nofollow">测试结果和 IDE 输出</a></h2> <a name="result-windows" rel="nofollow"> <p>PHPUnit 测试的结果会显示在 IDE 的“测试结果”和“输出”两个窗口中。“测试结果”窗口包含一个图形窗格和一个简短文本窗格。“输出”窗口提供了输出的更详细文本版本。在此部分,您将详细了解“测试结果”窗口和“输出”窗口。</p> <p>在“测试结果”窗口中,您可以从下列位置获取有关失败的测试的信息:</p> <ul> <li>UI 窗格中失败测试的树条目所附带的消息</li> <li>右侧窗格中的文本,其中包括指向失败的测试代码行的链接</li> <li>将光标悬停在 UI 窗格中失败的测试上时显示的工具提示文本</li> </ul> </a> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/bcf4ae31a1ee6f8a0fa193042292aa4f.png" width="598" height="318" /> <p>“测试结果”窗口在左侧包括以下按钮:</p> <ul> <li>重新运行测试按钮<img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/763cfdf5b9fade5800dc9706113addf9.png" width="27" height="27" /></li> <li>在显示所有测试的结果和仅显示失败测试的结果之间进行切换的按钮<img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/c22f2311a126e30662f2da6e51bdaaaa.png" width="27" height="27" /></li> <li>导航至下一个测试结果的按钮 <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/b24c527016ebd78fc2e3905fb397a23f.png" width="27" height="27" />,以及导航至上一个测试结果的按钮 <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/e61bef95a9d4bddbecb15c90b2d821ec.png" width="27" height="27" /></li> </ul> <p>“输出”窗口显示 PHPUnit 脚本的完整输出。当您无法通过“测试结果”窗口中的信息找出错误原因时,该窗口会非常有用。与“测试结果”窗口类似,“输出”窗口包括指向失败的测试类行 的链接。此外,该窗口还在左侧包括用于重新运行测试的按钮以及用于打开 PHP 选项窗口的按钮。<img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/37b22a598c6c6749ca8f4beb94fe19cc.png" width="27" height="25" /></p> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/4f0fd4cbe1dba0efdcaa551f4e23d0e7.png" width="535" height="269" /> <h2><a name="result-windows" rel="nofollow"></a><a name="code-coverage" rel="nofollow">代码覆盖率</a></h2> <a name="code-coverage" rel="nofollow"> <p>适用于 PHP 的 NetBeans IDE 提供了代码覆盖率以及 PHPUnit 支持。(IDE 也为 Ruby 和 Python 提供了代码覆盖率)。代码覆盖率检查 PHPUnit 测试是否覆盖了所有方法。在此部分,您将了解如何通过现有 Calculator 类来使用代码覆盖率。</p> <p><strong>使用代码覆盖率:</strong></p> </a> <ol> <a name="code-coverage" rel="nofollow"> <li>打开 Calculator.php,然后添加内容与 add 函数相同的 add2 函数。现在,Calculator 类将如下所示: <pre class="brush:php; toolbar: true; auto-links: false;"><?php class Calculator { /** * @assert (0, 0) == 0 * @assert (0, 1) == 1 * @assert (1, 0) == 1 * @assert (1, 1) == 2 * @assert (1, 2) == 4 */ public function add($a, $b) { return $a + $b; } public function add2($a, $b) { return $a + $b; } } ?></pre></li> </a> <li><a name="code-coverage" rel="nofollow">右键单击项目节点。从上下文菜单中,选择“代码覆盖率”>“收集并显示代码覆盖率”。缺省情况下,“显示编辑器栏”也会处于选定状态。<br /> </a><img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/156b94be88662cbd87668fbdd55c6a31.png" width="503" height="251" /></li> <li>现在,编辑器会在底部显示代码覆盖率编辑器栏。由于尚未测试代码覆盖率,因此编辑器栏报告覆盖率为 0%。(在单击“清除”以清除测试结果后,编辑器栏也会显示覆盖率为 0%。) <br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/183eff4532ac44f9ff08b4578e2853c6.png" width="592" height="428" /></li> <li>单击“测试”以测试打开的文件,或单击“所有测试”以运行项目的所有测试。此时将显示“测试结果”。此外,“代码覆盖率”栏会告知您测试所覆盖的可执行代码语句百分比。在编辑器窗口中,覆盖的代码将以绿色突出显示,未覆盖的代码将以红色突出显示。<br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/e03de4e96f5e10e1442dac21ca2d8fb4.png" width="593" height="699" /></li> <li>在编辑器栏中,单击“报告...”。代码覆盖率报告打开,其中显示了对项目运行的所有测试的结果。使用报告中的按钮,您可以清除结果,再次运行所有测试或取消激活代码覆盖率(单击“完成”)。<br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/7179aea6645e50ffd4ae33461849d9ce.png" width="449" height="212" /></li> <li>您可以在项目中添加其他类;删除测试文件,然后重新创建测试文件;接下来,再次查看代码覆盖率报告。此时将会列出新类。在下面的报告中,Calculator 类又有一个函数未包括在测试中。<br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/4dc033a6d92e44cbe54d61c55a29cb17.png" width="444" height="256" /></li> </ol> <h2><a name="code-coverage" rel="nofollow"></a><a name="project-specific-configurations" rel="nofollow">使用项目特定的配置</a></h2> <a name="project-specific-configurations" rel="nofollow"> <p>在 IDE 中,可以为项目选择以下定制配置:</p> <ul> <li>引导文件</li> <li>XML 配置文件</li> <li>测试套件</li> </ul> <p>要设置项目特定的配置,请右键单击项目节点或项目的“测试文件”节点,然后选择“属性”。这会打开“属性”对话框。然后选择 PHPUnit 类别。打开一个对话框,可以在其中选择定制引导、XML 配置或测试套件文件。如果您不熟悉这些文件的结构,可以使用 NetBeans IDE 生成框架。</p> </a> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/a188c80e6172ff81bba5203a9c597dba.png" width="600" height="265" /> <p>使用定制类加载器的项目需要<em>引导选项</em>,例如,通过实现 Magic 函数 __autoload()。如果需要预先包含一个文件(如定义项目中的多个类所使用的全局常量的文件),则也需要使用引导选项。</p> <p><a name="project-specific-configurations" rel="nofollow">可通过 XML 配置文件定义命令行调用中使用的选项。</a><a href="/misc/goto?guid=4959498071410033200" rel="nofollow">PHPUnit 手册</a>中提供了完整的介绍。还可以使用 XML 配置文件为测试用例定义 php.ini 设置和全局变量。也可以在 XML 配置文件中设置引导选项。</p> <p>如果设置定制测试套件,每次选择“运行”>“测试项目”时,都会运行该套件。如果要仅运行一部分测试,或者要使用最近添加(必须手动添加)的 PHPUnit 功能(如数据提供器),该功能特别有用。 </p> <p>请注意,您可以根据需要定义多个测试套件,并通过在项目资源管理器中右键单击文件并选择“运行”来分别运行这些套件。</p> <p>为防止造成混乱,NetBeans 会通知您是否使用定制测试套件。可以在“测试结果”和“输出”窗口中找到通知。</p> <h2><a name="selenium" rel="nofollow">在 Selenium 框架上运行测试</a></h2> <a name="selenium" rel="nofollow"></a> <p><a name="selenium" rel="nofollow">Selenium 是一种测试 Web 应用程序框架的可移植软件。这些测试可以编写为 HTML 表,或以各种常用的编程语言进行编码,并且可以直接在目前的多数 Web 浏览器中运行。Selenium 可以部署在 Windows、Linux 和 Macintosh 上。有关更多详细信息,请参见 </a><a href="/misc/goto?guid=4959498071497788718" rel="nofollow">Selenium Web 站点</a>。 </p> <p>NetBeans IDE 具有包含 Selenium 服务器的插件。通过此插件,您可以对 PHP、Web 应用程序或 Maven 项目运行 Selenium 测试。要对 PHP 运行 Selenium 测试,需要将 Testing Selenium 软件包安装到 PHP 引擎。</p> <p><strong>对 PHP 运行 Selenium 测试:</strong></p> <ol> <li>打开命令提示符,然后运行 pear install Testing_Selenium-beta 命令。您需要在 Path 变量中包含 PHP_HOME/php/PEAR。如果成功运行该命令,则将显示以下提示:install ok: channel://pear.php.net/Testing_Selenium-0.4.3。</li> <li>在 IDE 中,打开“工具”>“插件”,然后安装 "Selenium Module for PHP"。</li> <li>在“项目”窗口中,右键单击 Calculator 项目的节点。选择“新建”>“其他”。打开“新建文件”向导。选择 "Selenium",然后单击“下一步”。 <br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/ce6af96beda6ac0353d2e9f1bd48cbd7.png" width="543" height="413" /></li> <li>第一次创建 Selenium 测试时,将会打开一个对话框,要求您设置 Selenium 测试文件的目录。此目录应不同于 PHPUnit 测试文件的目录。否则,每次运行单元测试时,Selenium 测试都会运行。运行 Selenium 之类的功能测试通常比运行单元测试所花费的时间长,因此在每次运行单元测试时,您可能不会希望运行这些测试。</li> <li>接受“名称和位置”页中的缺省设置,然后单击“完成”。新 Selenium 测试文件在编辑器中打开,并在“项目”窗口中显示。 <br /> <img style="cursor:pointer;" alt="使用 PHPUnit 和 Selenium 进行测试" src="https://simg.open-open.com/show/2931fe10c23ebb81e0afc73fdb8195be.png" width="279" height="187" /></li> <li>现在,“运行 Selenium 测试”项已添加到项目的上下文菜单中。单击此项,Selenium 测试结果随即显示在与 PHPUnit 测试相同的“测试结果”窗口中。</li> </ol> <h2><a name="more-exercises" rel="nofollow">更多练习</a></h2> <a name="more-exercises" rel="nofollow"> <p>下面是供您探讨的更多思路:</p> </a> <a name="more-exercises" rel="nofollow"> <li>在 Calculator.php 中添加第二个类,如将 $a 与 $b 相乘的 Calculator2 类。删除测试,然后重新生成测试。</li> </a> <a name="more-exercises" rel="nofollow">如果尝试学习包含多个部分的</a> <a href="/misc/goto?guid=4959498071592340405" rel="nofollow">创建 CRUD 应用程序教程</a>,请为最终项目创建 Selenium 测试 <br /> <br /> 文章出处: <a href="/misc/goto?guid=4959498071670576206" rel="nofollow" target="_blank">http://netbeans.org/kb/docs/php/phpunit_zh_CN.html</a>