使用数据生成器生成数据库的测试数据

可以使用 Visual Studio 高级专业版来创建验证数据库项目中数据库对象的行为时需要的测试数据。 可以生成适合数据库架构但与生产数据无关的数据。 此方法可帮助保护生产数据的隐私或安全。

可以定义一个数据生成计划,用于指定您希望如何为特定表和列生成数据的详细信息。 对于每一列,可以指定一个生成特定类型数据的数据生成器。

在数据库项目中创建数据生成计划时,该计划基于该项目的架构。 如果创建了数据生成计划,但随后架构发生了更改,则系统会提示您更新该计划。

重要说明重要事项

如果未根据架构更改来更新数据生成计划,则不能继续修改该计划。 只能关闭并重新打开数据生成计划以重新显示该提示。

运行数据库单元测试时,可以为每个测试项目指定不同的数据生成计划。 因此,可以针对每组测试将数据库初始化为不同的状态。

数据生成器

Visual Studio 高级专业版包括多个内置的数据生成器,用于生成不同类型的数据。 例如,整数生成器可提供随机整数值,字符串生成器可提供随机字符串,正则表达式生成器可提供与指定模式匹配的字符串。 有关标准数据生成器的更多信息和完整列表,请参见标准数据生成器类型指定为列生成数据的详细信息

如果 Visual Studio 高级专业版附带的生成器未提供满足要求的数据,则可以创建自定义生成器。 例如,如果数据库中有一列包含引用另一列的 CHECK 约束,则可能需要创建自定义数据生成器。 有关更多信息,请参见用自定义数据生成器生成专用的测试数据

如果尝试为包含 SPARSE 列和 COLUMN_SET 的表生成数据,则可能会收到错误。 有关更多信息,请参见数据生成问题疑难解答

团队环境中的数据生成计划

数据生成计划是一个 XML 文件,它包含有关数据库架构的信息和一些配置信息,这些配置信息控制如何为您指定的每个表中的每一列进行数据生成。 对于一个包含大约 40 个表的数据库,其数据生成计划的大小大约为 8 MB,长度可超过 100,000 行。

无法使用 Team Foundation 版本控制或其他版本控制系统自动将更改合并到 .dgen 文件中。 必须用于手动合并大型的 XML 文件的过程不易操作且容易出错。 当您必须更改数据生成计划时,可以将计划以独占方式签出,从而尽可能减少与计划相关的问题。

数据生成器的安全性

可以在团队环境中共享数据生成计划和自定义数据生成器。 在共享或使用共享的数据生成文件之前,应考虑以下安全风险:

  • 数据生成计划中的架构信息
    当您创建数据生成计划时,.dgen 文件中包含表的架构,而表的架构可能属于敏感的商业机密。 当您共享 .dgen 文件时,与您共享该文件的人将能够看到您的架构。 应只与受信任的来源共享数据生成计划。

  • 数据生成计划中的恶意代码
    当数据生成计划中包含数据绑定生成器时,您会编写一个随计划一同运行的 Transact-SQL 查询。 此方法允许任意 Transact-SQL 从数据生成计划内部运行。 应只从受信任的来源获取数据生成计划,并且应提醒最终用户不要运行接收自不受信任的来源的数据生成计划。

  • 连接信息和自定义数据生成器
    所有的自定义数据生成器都能够在运行时访问数据库连接字符串。 恶意自定义生成器可能会公开连接字符串信息。 应只从受信任的来源获取自定义数据生成器,并且应提醒最终用户不要使用接收自不受信任的来源的自定义数据生成器。

  • 自定义数据生成器中的恶意代码
    自定义数据生成器是可以包含任意代码的类。 在使用自定义数据生成器时,它将使用与活动用户相同的权限运行。 此方法可以在 FullTrust 模式下运行恶意代码。 应只从受信任的来源获取自定义数据生成器,并且应提醒最终用户不要使用接收自不受信任的来源的自定义数据生成器。

  • 自定义数据生成器的安装程序中的恶意代码
    可以创建部署项目来安装自定义数据生成器。 部署项目中可以包含任意代码。 在运行自定义数据生成器的安装程序时,该程序将用提升的权限运行。 此方法可以使用提升的权限运行恶意代码。 应只从受信任的来源获取自定义数据生成器安装程序,并且应提醒最终用户不要运行接收自不受信任来源的自定义数据生成器的安装程序。

常规任务

常规任务

支持内容

进行动手练习:可以按照介绍性演练操作,熟悉如何创建和运行简单的数据库单元测试。

创建数据生成计划:为每个单元测试项目或特定的应用程序测试创建数据生成计划。 还可以定义一个数据生成计划,使所有列默认重用所指定其他数据库中的数据。

从上一版本升级数据生成计划:可以使用通过上一版本的 Visual Studio 高级专业版创建的数据生成计划。 但是,在打开计划后必须立即对其进行升级。

指定要生成的表:可以为所有表生成数据,也可以仅为所指定的那些表生成数据。 可以为每个表指定要生成的行数。 或者,也可以按照相对于为另一个表所生成行数的比率生成行数。

配置为所指定表中每一列生成数据的方式:为每一列指定数据生成器的类型。 还可以提供对数据值范围的约束。 对于更高级的数据生成器,可以提供其他配置信息以进一步优化所生成的数据。

预览生成的数据:在将数据写入到数据库之前,可以预览数据生成计划中包括的任何表的数据。 通过预览数据,您可以调整数据生成计划,而无需反复地生成数据。

生成测试数据:预览并验证将生成的数据之后,您可以运行数据生成计划以生成测试数据。 还可以配置单元测试项目,以便只要运行单元测试就会自动生成数据。

签入数据生成计划:就像您必须将单元测试签入版本控制以与团队共享一样,您也必须签入数据生成计划。

更改数据生成器的默认值和选项:可以为随机种子和要插入的行数指定默认值。 还可以指定用于控制数据生成器的各方面的选项,例如,要在预览窗口中显示的行数,以及在为单个表生成数据时可以显示的最大可接受错误数(若超过此数量,操作将失败)。

疑难解答:可以详细了解如何解决与创建和使用数据生成计划相关的常见问题。

相关方案