背景
我有一个软件组件将数据写入postgres数据库(分成几个表),我想为这个组件编写一个自动功能测试。我已经有大量的单元测试来检查子组件,但是我想要一个检查整个系统端到端的测试。
对于每次测试运行,我使用一个干净的数据库(实际上是一个全新的,这个测试运行的数据库)。软件组件在给定相同输入的意义上是稳定的,它总是将相同的用户数据写入数据库。
数据库设计是关系型的,因此大多数表都包含外键。显然,我不想检查这些密钥的价值,因为我不想依赖这些密钥是由postgres以预测方式生成的。
假设没有关于数据库的用户权限,连接问题等的问题。也忽略了开发/生产差异。
我目前使用多个select
语句来生成文本"转储"数据库并将其与引用转储(忽略空格等)进行比较,但这看起来相当笨拙。此外,这并没有考虑表之间的关系。如果数据库布局发生变化,那么扩展当前的处理方法并不会让我觉得可维护。
我的软件以及测试框架是用C ++编写的,测试脚本是简单的bash脚本。我愿意使用任何语言来实现这一目标。
问题
如何以数据库方式"?
自动验证数据库内容更好的方法是不依赖postgres作为后端。
答案 0 :(得分:1)
pgTap是PostgreSQL的测试框架。您可以使用它来测试PostgreSQL数据库的结构和the content。我已经在必须满足种子数据的某些合同标准的项目上使用它(“查找”表的数据,如州代码和缩写,交付运营商,用户角色等)。它为此目的效果很好。
但我还没有看到一个令人信服的理由放弃现有的方法,这种方法已经编写完成并正在使用。据我所知,所有当前SQL dbms都支持单个表的文本转储。如果移动到不同的dbms,则必须更改转储程序的名称及其参数。我无法想象为什么你需要更改参考文件,但我认为可以发生。
“数据库方式”实际上只是选择您希望在数据库中的数据,并查看它是否真的存在。这就是你现在正在做的事情,以及pgTap可能带来的更大灵活性。
为了提高可维护性(减少重复),可以从参考数据生成INSERT语句,或者可以从INSERT语句生成参考数据。我可以想象开发环境,这是明智之举,但我不知道你的是否是其中之一。