首页 / 知识
关于数据库:如何测试Web代码?
2023-04-11 17:14:00

How to Test Web Code?对于在高度依赖状态的数据库后端开发中,有没有人提供一些编写测试代码的好提示? 具体来说,我想为从数据库中检索记录的代码编写测试,但是答案将取决于数据库中的数据(可能会随时间而变化)。 人们通常是否使用"冻结的"数据库制作一个单独的开发系统,以便任何给定的函数都应始终返回完全相同的结果集? 我很确定这不是一个新问题,因此我将非常有兴趣学习其他人的经验。 有没有好的文章讨论这个基于Web的开发问题? 我通常会编写PHP代码,但是我希望所有这些问题在很大程度上与语言和框架无关。 您应该研究DBUnit,或尝试查找等效的PHP(必须在那里找到一个PHP)。您可以使用它来准备具有代表测试数据的一组特定数据的数据库,因此每个测试将不再依赖于数据库和某些现有状态。这样,每个测试都是自包含的,在进一步使用数据库时不会中断。 更新:谷歌的快速搜索显示了PHPUnit的数据库单元扩展。 如果您最关心数据层测试,则可能需要阅读本书:xUnit测试模式:重构测试代码。我本人对此始终不确定,但是这本书在帮助列举性能,可重复性等问题方面做得很好。 我们使用内存数据库(hsql:http://hsqldb.org/)。 Hibernate(http://www.hibernate.org/)使我们可以轻松地将单元测试指向测试数据库,并获得额外的好处,即它们可以像闪电一样快速运行。. 我想这取决于您使用的数据库,但是Red Gate(www.red-gate.com)制作了一个称为SQL数据生成器的工具。可以对它进行配置,以用合理的测试数据填充数据库。您还可以告诉它在其随机数生成器中始终使用相同的种子,因此每次的"随机"数据都相同。 然后您可以编写单元测试以利用此可靠,可重复的数据。 关于测试Web方面,我目前正在研究Selenium(selenium.openqa.org)。这似乎是一个具有跨浏览器功能的测试套件,它将帮助您测试功能。但是,与所有这些网站测试工具一样,没有真正的方法可以测试这些东西在所有浏览器中的外观,而不会引起人们的注意! 总的来说,我同意Peter的观点,但是对于创建和删除测试数据,我不会直接使用SQL。我更喜欢使用产品中使用的某些CRUD API来创建与生产尽可能相似的数据... 我建议使用三个数据库。一个生产数据库,一个开发数据库(为每个开发人员填充一些有意义的数据)和一个测试数据库(具有空表,也许总是需要几行)。 一种测试数据库代码的方法是: 可以使用 这是我的策略(我使用JUnit,但是我敢肯定有一种方法可以在PHP中进行等效操作): 我有一个方法在特定DAO类的所有单元测试之前运行。它将dev数据库置于已知状态(添加所有测试数据等)。在运行测试时,我会跟踪添加到已知状态的所有数据。每次测试结束时都会清理此数据。在对该类进行所有测试之后,另一个方法将删除开发数据库中的所有测试数据,并将其保持在运行测试之前的状态。要完成所有这些工作需要一些工作,但是我通常在DBTestCommon类中编写方法,我所有的DAO测试类都可以使用这些方法。 您可以尝试http://selenium.openqa.org/,它更多用于GUI测试而不是数据层测试应用程序,但确实记录了您的操作,然后可以回放这些操作以在不同平台上自动进行测试。 如果您可以在运行测试之前以已知数量设置数据库,然后最后将其拆除,那么您将知道正在使用什么数据。 然后,您可以使用Selenium之类的东西轻松地从您的UI中进行测试(假设此处基于Web,但是那里有很多用于其他UI风格的UI测试工具),并检测是否存在从中撤回的某些记录数据库。 绝对值得设置数据库的测试版本-或者让测试脚本使用已知数据填充数据库作为测试的一部分。 我的工作存在完全相同的问题,我发现最好的主意是要有一个PHP脚本来重新创建数据库,然后是一个单独的脚本,在其中我将疯狂的数据扔给它,以查看是否破坏了它。 我从未使用过任何单元测试或类似测试,所以不能说它是否有效。 |
最新内容
相关内容
python如何操作mysql数据库
python如何操作mysql数据库,培训,标准,项目,密码,数据库,接口,表字,操作,用户,机子,Python标准数据库接口为PythonDB-API,PythonDB-API为开发关于sql Server:将文件存储在数据库
关于sql Server:将文件存储在数据库中而不是文件系统中?,关于sql Server:将文件存储在数据库中而不是文件系统中?,性能,文件系统,文件存关于数据库:没有Linq时像Linq一样查
关于数据库:没有Linq时像Linq一样查询,关于数据库:没有Linq时像Linq一样查询,框架,项目,支持,我有一个,Querying like Linq when you d关于mysql:如何在开发,测试和生产中
关于mysql:如何在开发,测试和生产中管理数据库?,关于mysql:如何在开发,测试和生产中管理数据库?,数据库,服务器,数据,很难,How do you mana使用 MS Access 作为 MySQL 数据库
使用 MS Access 作为 MySQL 数据库后端的前端的问题?,使用 MS Access 作为 MySQL 数据库后端的前端的问题?,数据库,用户,文件,编写,Iss关于sql:数据库继承?
关于sql:数据库继承?,关于sql:数据库继承?,实体,继承,方法,字段,Inheritance in database?有什么方法可以在数据库中使用继承(特别是在SQ关于 .net:如何使用 ADO.NET DataSe
关于 .net:如何使用 ADO.NET DataSet 和 DataAdapter 将树结构持久保存到具有自动递增 ID 的数据库表中,关于 .net:如何使用 ADO.NET如何配置eclipse(zend studio 6)来
如何配置eclipse(zend studio 6)来提示和编码多种语言?,如何配置eclipse(zend studio 6)来提示和编码多种语言?,解释,代码提示,完整,关于SQL Server:MOSS SSP问题-从已
关于SQL Server:MOSS SSP问题-从已删除的SSP失败的数据库登录,关于SQL Server:MOSS SSP问题-从已删除的SSP失败的数据库登录,的是,生关于数据库:将图像存储在数据库中-
关于数据库:将图像存储在数据库中-是或否?,关于数据库:将图像存储在数据库中-是或否?,位置,图像,应用程序,文件系统,Storing Images in D关于动作脚本3:一次使用多个SQLite
关于动作脚本3:一次使用多个SQLite数据库,关于动作脚本3:一次使用多个SQLite数据库,服务器,下载,数据库,客户端,Using multiple SQLite自动生成数据库图MySQL
自动生成数据库图MySQL,自动生成数据库图MySQL,工具,图表,创建数据库,选择,Auto Generate Database Diagram MySQL我厌倦了在每个项