通过在浏览器上模拟自动创建单元或功能 php 测试
Create a unit or functional php test automatically by simulating it on browser
正如标题所说,
无论如何,我可以通过在浏览器中模拟一次或多次来自动创建单元或功能测试吗?
我在考虑像 firefox 中的 iMacros 插件这样的东西,我们可以记录我们对任何元素的点击,它会自动创建宏。但是我想将这些宏行解析为 php 代码行。
好吧,如果问题类似于“是否可以通过在浏览器上模拟来自动生成 php 代码,基本上这更有意义 '
可能吗?
是的。有几种工具正是为这种事情而设计的。
您应该先看看 Selenium and Sahi。这两种工具都允许您在任何主要 Web 浏览器中记录一系列操作,并将其作为测试脚本自动重放。
Sahi 和 Selenium 都可以与 PHP 测试框架集成。我过去曾在 Mink 上取得过成功。然而,实际上没有必要使用与 PHP 相关的任何东西来进行功能测试,因为浏览器环境与您的 PHP 后端完全分开,因此您可以轻松地坚持使用 Sahi/Selenium的本机脚本工具。
但是请注意,一旦生成脚本,您很可能需要手动修改它,因为记录过程并不总是以理想的方式记录内容。例如,如果录制脚本在站点中获取唯一 ID,那么下次脚本 运行s 时这些 ID 可能会有所不同,因此脚本将失败。这被称为测试 "brittle",这是以这种方式记录的自动化测试中非常常见的问题。
另请注意,此类测试绝对不是单元测试。是功能测试。为了正确测试您的系统,您应该编写单元测试 除了 (甚至优先于)进行功能测试。
最后,值得注意的是,功能测试往往比 运行 慢很多。他们正在模拟真实的用户体验,因此您必须考虑页面加载时间。如果你想用一个合理大小的功能测试套件来全面测试你的系统,测试将花费很长时间 运行 (我见过功能测试需要一个多小时才能完成的网站,我我确定还有其他人需要更长的时间)。这意味着每次更改任何内容时 运行 全套功能测试变得不切实际。
这是一个好的单元测试套件也很重要的另一个原因;即使是具有数千个单元测试的系统通常也可以 运行 在一分钟内完成整个测试集。这意味着您可以 运行 在更改内容时为自己进行测试,因此您可以立即看到出现问题的情况。功能测试无法为您轻松做到这一点。
正如标题所说, 无论如何,我可以通过在浏览器中模拟一次或多次来自动创建单元或功能测试吗?
我在考虑像 firefox 中的 iMacros 插件这样的东西,我们可以记录我们对任何元素的点击,它会自动创建宏。但是我想将这些宏行解析为 php 代码行。
好吧,如果问题类似于“是否可以通过在浏览器上模拟来自动生成 php 代码,基本上这更有意义 '
可能吗?
是的。有几种工具正是为这种事情而设计的。
您应该先看看 Selenium and Sahi。这两种工具都允许您在任何主要 Web 浏览器中记录一系列操作,并将其作为测试脚本自动重放。
Sahi 和 Selenium 都可以与 PHP 测试框架集成。我过去曾在 Mink 上取得过成功。然而,实际上没有必要使用与 PHP 相关的任何东西来进行功能测试,因为浏览器环境与您的 PHP 后端完全分开,因此您可以轻松地坚持使用 Sahi/Selenium的本机脚本工具。
但是请注意,一旦生成脚本,您很可能需要手动修改它,因为记录过程并不总是以理想的方式记录内容。例如,如果录制脚本在站点中获取唯一 ID,那么下次脚本 运行s 时这些 ID 可能会有所不同,因此脚本将失败。这被称为测试 "brittle",这是以这种方式记录的自动化测试中非常常见的问题。
另请注意,此类测试绝对不是单元测试。是功能测试。为了正确测试您的系统,您应该编写单元测试 除了 (甚至优先于)进行功能测试。
最后,值得注意的是,功能测试往往比 运行 慢很多。他们正在模拟真实的用户体验,因此您必须考虑页面加载时间。如果你想用一个合理大小的功能测试套件来全面测试你的系统,测试将花费很长时间 运行 (我见过功能测试需要一个多小时才能完成的网站,我我确定还有其他人需要更长的时间)。这意味着每次更改任何内容时 运行 全套功能测试变得不切实际。
这是一个好的单元测试套件也很重要的另一个原因;即使是具有数千个单元测试的系统通常也可以 运行 在一分钟内完成整个测试集。这意味着您可以 运行 在更改内容时为自己进行测试,因此您可以立即看到出现问题的情况。功能测试无法为您轻松做到这一点。