Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为通过应用程序工作的测试人员创建数据迁移策略 测试人员正在通过应用程序更新数据_Sql_Continuous Integration_Database Migration_Liquibase_Dbunit - Fatal编程技术网

Sql 为通过应用程序工作的测试人员创建数据迁移策略 测试人员正在通过应用程序更新数据

Sql 为通过应用程序工作的测试人员创建数据迁移策略 测试人员正在通过应用程序更新数据,sql,continuous-integration,database-migration,liquibase,dbunit,Sql,Continuous Integration,Database Migration,Liquibase,Dbunit,我正在使用一个应用程序,该应用程序正在快速变化,但与此同时,测试人员需要构建测试和认证数据。这些数据是通过直接访问应用程序而不是编写SQL语句来创建的 因此,我有来自开发人员的变更集,同时测试人员通过应用程序应用数据变更 我已经准备好运行开发人员编写的变更集,但是我很难找到最干净的方法来跟踪和保存测试人员的数据变更 可能的工作流程 基于在整个过程中使用liquibase,我认为我需要一个工作流,如: 从最新的干净数据库开始 运行更新 快照或标记数据库以便以后进行差异化 让测试人员通过应用程序进行

我正在使用一个应用程序,该应用程序正在快速变化,但与此同时,测试人员需要构建测试和认证数据。这些数据是通过直接访问应用程序而不是编写SQL语句来创建的

因此,我有来自开发人员的变更集,同时测试人员通过应用程序应用数据变更

我已经准备好运行开发人员编写的变更集,但是我很难找到最干净的方法来跟踪和保存测试人员的数据变更

可能的工作流程 基于在整个过程中使用liquibase,我认为我需要一个工作流,如:

  • 从最新的干净数据库开始
  • 运行更新
  • 快照或标记数据库以便以后进行差异化
  • 让测试人员通过应用程序进行黑客攻击
  • 如果测试人员批准变更,则在晋升时:
  • 将数据差异生成为变更集
  • 将数据变更集包括在主更新列表中
  • 在此VM上,将更改集记录为已运行
  • 提交给scm
  • 重复
  • 问题
  • 有没有办法获得真实的数据差异,而不是完整的数据导出?似乎
    generateChangeLog
    是diff中唯一允许设置
    --diff type=“data”
    标志和值的工具,但文档也让人觉得它不会区分,它只是转储所有数据

  • 如果是

  • 你能提供一个电话样本吗?我已经计算出url&referenceURL并将其存储在liquibase.properties文件中,我只需要知道要传递哪些命令和标志

  • 它是否可以用于标记,而不必创建数据库备份?(工作流中的步骤3)

  • 如果没有,

  • 有没有人看过一个很好的教程或如何显示和更新之间的编排

  • 如何处理数据导出不再符合模式的情况?例如,FullName split=>FirstName和LastName;可以处理这个问题,但我认为我需要在和之间协调运行更新,否则的差异将无效


  • 如果您有任何指导、提示、过去的经验或需要注意的地方,我们将不胜感激。

    不,liquibase不支持数据差异,只支持完整的数据转储

    我已经了解了这一点,它可以帮助您进行dbunit集成,但是使用dbunit或任何其他数据加载工具来管理您的数据会像您建议的那样遇到模式不兼容的问题

    我建议做的是将“测试数据加载”变更集添加到您的变更日志中,以便在您继续进行的过程中构建您的测试数据

    例如:

    <changeSet id="1" author="x">
       <createTable name="a"../>
    </changeSet>
    <changeSet id="2" author="x">
       <createTable name="b"../>
    </changeSet>
    
    <changeSet id="3" author="x" context="test">
       <sqlFile path="data-dump.1.sql">
    </changeSet>
    
    <changeSet id="4" author="x">
       <renameColumn oldColumnName="s" newColumnName="t"../>
    </changeSet>
    
    <changeSet id="5" author="x" context="test">
       <sqlFile path="data-dump.2.sql">
    </changeSet>
    
    
    
    您可以看到,它创建了一个初始结构,然后将一轮QA数据加载到数据库中,数据库结构与变更集2之后的一样。注意上下文的使用,这样测试数据就不会加载到产品中

    测试数据之后是更多的结构变化,然后是另一轮附加的QA数据。新数据不会重新创建data-dump.1.sql,而是添加到其中。由于data-dump.1.sql总是在变更集4之前运行,因此不必随着模式的更改而更新


    然而,最大的问题是如何在QA构建测试数据时提取测试数据。如果他们是通过您的应用程序添加的,最简单的方法可能是使用自动收集应用程序中执行的所有SQL,然后将其复制到data-dump.X.SQL文件中。

    作为我的另一个答案,您可以完全转储数据库(使用
    liquibase generateChangeLog diffTypes=data
    或您的标准数据库备份工具),您可以从QA构建的数据库创建该工具,并沿着变更日志文件移动

    <changeSet id="1" author="x">
       <createTable name="a"../>
    </changeSet>
    <changeSet id="2" author="x">
       <createTable name="b"../>
    </changeSet>
    <changeSet id="testdata-1" author="x" context="test">
        <sqlFile path="data-dump.sql">
    </changeSet>
    
    第1步:

    创建您的数据库

    <changeSet id="1" author="x">
       <createTable name="a"../>
    </changeSet>
    <changeSet id="2" author="x">
       <createTable name="b"../>
    </changeSet>
    
    
    
    步骤2

    QA创建数据库,然后进行备份,该备份包含在变更日志文件中

    <changeSet id="1" author="x">
       <createTable name="a"../>
    </changeSet>
    <changeSet id="2" author="x">
       <createTable name="b"../>
    </changeSet>
    <changeSet id="testdata-1" author="x" context="test">
        <sqlFile path="data-dump.sql">
    </changeSet>
    
    
    
    步骤3

    有一些架构更改不需要新的测试数据,请继续添加到changelog文件。测试数据将随迁移并与所需架构匹配

    <changeSet id="1" author="x">
       <createTable name="a"../>
    </changeSet>
    <changeSet id="2" author="x">
       <createTable name="b"../>
    </changeSet>
    <changeSet id="testdata-1" author="x" context="test">
        <sqlFile path="data-dump.sql">
    </changeSet>
    <changeSet id="4" author="x">
       <renameColumn oldColumnName="s" newColumnName="t"../>
    </changeSet>
    
    
    
    步骤4

    当QA需要额外数据时,他们会使用应用程序添加他们想要的数据,然后进行新的完整备份,并将testdata变更集移动到末尾

    <changeSet id="1" author="x">
       <createTable name="a"../>
    </changeSet>
    <changeSet id="2" author="x">
       <createTable name="b"../>
    </changeSet>
    <changeSet id="4" author="x">
       <renameColumn oldColumnName="s" newColumnName="t"../>
    </changeSet>
    <changeSet id="testdata-1" author="x" context="test">
        <sqlFile path="data-dump.sql">
    </changeSet>
    
    
    

    此过程确实要求您删除开发/测试数据库以获取新的测试数据,否则您将遇到插入冲突,但这取决于您的工作流程。我的想法与您的建议完全相同,如果我可以在数据差异发生时创建数据差异,那么我们可以将其添加到变更日志中(我在上面称之为master)因此,它们是按顺序运行的。我也打算使用上下文,我只是在上面省略了它,以尝试稍微简化它。p6spy看起来可以做到这一点,我会试一试,谢谢。我更喜欢p6spy方法的声音,但是如果我不能让p6spy按照我需要的方式工作,我会尝试这个。听起来很简单nough和我可能可以以最小的痛苦将其与CI集成;我只需在升级/批准时创建转储,并可以使用sed或awk变更日志删除该变更集,并在最后添加它。我将此作为一个快速的黑客实现,以便在运行
    liquibase时,我至少可以在p6spy;的游戏中准备一些东西--diffTypes=data diffChangeLog
    我并没有真正得到一个数据转储,所以我想我需要
    liquibase--changeLogFile=data-dump.xml--diffTypes=data generateChangeLog
    来代替,对吗?我在这方面遇到了堆问题,并且在那个虚拟机上没有足够的内存来抛出一个错误