自动集成测试C ++应用程序与数据库

自动集成测试C ++应用程序与数据库

Automated integration testing a C++ app with a database

我将自动集成测试引入到一个成熟的应用程序中,该应用程序直到现在还只是通过手动测试。

该应用程序基于Windows,可与MySQL数据库对话。

在将要发生的数据库事务方面,使测试彼此独立的最佳方法(包括所有推荐工具的详细信息)是什么?

(不允许为此目的修改应用程序源。)


您如何验证结果?

如果您需要查询数据库(听起来可能您确实需要这样做),那么我同意Kris K的观点,只是我会尽力在每个测试用例(而不仅仅是每个套件)之后重建数据库。

这有助于避免危险的交互测试

至于工具,我建议使用CppUnit。您实际上并没有进行单元测试,但是没关系,因为xUnit框架应该为您提供自动设置测试夹具所需的设置和拆卸框架。

显然,这可能会导致测试运行缓慢,具体取决于您的数据库大小,数量等。您可能能够附加/分离数据库,而不是删除/重建数据库。

如果您有兴趣进一步研究,请查看XUnit测试模式。对于这类事情,这是一本好书和一个很好的网站。

并感谢自动化:)

缺口


我曾经在数据库相关的单元测试类的SetUp函数中还原数据库。这样可以确保每个测试在相同条件下运行。

您可以考虑为测试准备特殊的数据库内容,即数据少于当前生产版本(以使恢复时间合理)。


您可以转储/还原每个测试套件的数据库,等等。由于您是自动执行此操作,因此可能是设置/拆卸功能中的某些功能。


正如@Kris K.所说,在每个测试之间转储和还原数据库可能是解决之道。

由于您正在考虑在App外部进行测试,因此我希望以一种可以构建更好的测试工具的语言来构建测试框架。

如果您使用Java构建测试框架,则可以利用JUnit,甚至还可以利用FitNesse之类的工具。

不要以为仅仅因为被测应用程序是C ++,就意味着您无法使用C ++进行自动化测试。


我相信,进行此类测试的最佳环境是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.支持沙箱测试模型,如果将在沙箱中进行一个测试,则将回滚每个DB上的所有数据库操作,这意味着所有更改都将被撤消。

  • 6.允许在测试初始化??和完成阶段将数据从一个数据库/ Excel泵入目标数据库。这是准备要测试的测试数据的简便方法。

  • 7,独特的跨不同类型数据库测试,这意味着目标和参考结果集可以来自两个数据库,甚至一个是SQL Server,另一个是Oracle。

  • 8.设置记录集的样式比较。 AnyDbTest会告诉您两个记录集之间的交集或盈余或缺失。

  • 9.记录集或标量值的顺序样式比较。这意味着两个结果集将按其原始顺序进行比较。

  • 10.允许将SQL语句的结果集导出到Xml / Excel文件中。


推荐阅读