我正在向一个成熟的应用程序引入自动化集成测试,该应用程序到目前为止只经过手动测试。
该应用程序基于 Windows,并与 MySQL 数据库对话。
就将发生的数据库事务而言,保持测试相互独立的最佳方法是什么(包括推荐的任何工具的详细信息)?
(出于此特定目的修改应用程序源不是一种选择。)
我正在向一个成熟的应用程序引入自动化集成测试,该应用程序到目前为止只经过手动测试。
该应用程序基于 Windows,并与 MySQL 数据库对话。
就将发生的数据库事务而言,保持测试相互独立的最佳方法是什么(包括推荐的任何工具的详细信息)?
(出于此特定目的修改应用程序源不是一种选择。)
你如何验证结果?
如果您需要查询数据库(听起来您可能会这样做)以获取结果,那么我同意 Kris K 的观点,但我会努力在每个测试用例之后重建数据库,而不仅仅是每个套件。
这有助于避免危险的交互测试
至于工具,我会推荐CppUnit。您并没有真正进行单元测试,但这并不重要,因为 xUnit 框架应该为您提供设置和拆卸框架,您需要自动设置测试夹具
显然,这可能会导致测试运行缓慢,具体取决于您的数据库大小、人口等。您可以附加/分离数据库,而不是删除/重建数据库。
如果您对进一步研究感兴趣,请查看XUnit 测试模式。对于这类事情,这是一本好书和一个很好的网站。
并感谢自动化:)
缺口
您可以为每个测试套件转储/恢复数据库等。由于您正在自动执行此操作,因此它可能是设置/拆卸功能中的某些内容。
我曾经在数据库相关单元测试类的SetUp函数中恢复数据库。这样可以确保每个测试在相同的条件下运行。
您可以考虑为测试准备特殊的数据库内容,即使用比当前生产版本更少的数据(以保持合理的恢复时间)。
我相信,进行此类测试的最佳环境是 VMWare 或类似的环境。设置您的数据库、事务日志等,然后记录全部内容 - 数据库以及配置。然后重新测试,重新加载图像和数据库并开始测试。随着系统的变化,这仍然需要维护测试,但至少测试是可重复的,这是集成测试中最大的挑战之一。
对于测试自动化,很多人使用 Perl,但我们发现 Perl 程序像 Topsy 一样增长并且变得复杂。如果您尝试构建一系列结构化测试,那么使用 Python 作为脚本语言(我们运行 C++ 测试)是值得的。
请尝试 AnyDbTest,我认为它正是您正在寻找的工具。(www.anydbtest.com)。
特征:
1.用 Xml 编写测试用例,而不是 Java/C++/C#/VB 代码。不需要那些昂贵的编程工具。
2.支持所有流行的数据库,如Oracle/SQL Server/My SQL
3. 支持多种断言,如 StrictEqual、SetEqual、IsSupersetOf、Overlaps 和 RecordCountEqual 等。另外,大多数断言可以前缀逻辑而不是运算符。
4.允许使用 Excel 电子表格/Xml 作为测试数据的来源。如您所知,Excel 电子表格可以轻松创建/编辑和维护测试数据。
5.支持沙盒测试模型,如果在沙盒中进行一项测试,则每个数据库上的所有数据库操作都将回滚,意味着任何更改都将被撤消。
6.允许在测试初始化和完成阶段执行从一个数据库/Excel到目标数据库的数据泵送。这是为测试准备测试数据的简单方法。
7.独特的跨不同类型数据库测试,即目标和参考结果集可以来自两个数据库,一个是SQL Server,另一个是Oracle。
8.设置记录集的样式比较。AnyDbTest 将告诉您两个记录集之间的交集、盈余或缺失。
9.记录集或标量值的顺序样式比较。这意味着两个结果集将按其原始顺序进行比较。
10.允许将SQL语句的结果集导出到Xml/Excel文件中。