データ移行中のデータテスト


久しぶりに自分のブログを書きました.自動化テストプロジェクトが終了した後、いくつかの新しいプロジェクトに参加しました.一部はテスト自動化とは関係ありません.現在行われているのは、古いシステムのビジネスデータを新しいシステムに移行するデータ移行テストです.ほとんどのテストはデータのテストに集中しており、主にBMDに基づいてデータフィールドの対応関係をテストしている.テスト例はSQLスクリプトで書かれています.これらのテスト例を呼び出すために、簡単なテストフレームワークも書きました.考え方は以下の通りです.
  • Main.sql

  • この書類は2つの部分があります.
    1)TestResultテーブルを生成し、各テストケースの結果を記録する.
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TestResult]') AND type in (N'U'))
     DROP TABLE [dbo].[TestResult]
    BEGIN
     CREATE TABLE [dbo].[TestResult](
     [ResultId] int identity(1,1) NOT NULL,
     [TestCaseId] nvarchar(255) NOT NULL,
     [ProcedureName] nvarchar(255) NOT NULL,
     [TestCaseResult] nvarchar(255) NOT NULL, 
     [TestLog] nvarchar(max) NULL,
     [ExecutionTimeStamp] datetime NULL
     )
     
     INSERT INTO [dbo].[TestResult] 
     VALUES
     
      
     ('C-301','AccountID','NOT RUN','',CURRENT_TIMESTAMP), 
     ......
     END

    2)各テスト・インスタンスに対応するストレージ・プロシージャを呼び出す.
    EXECUTE C_AccountID

    2.各部分のデータにはAccountなどの独自のファイルがあります.sql. このファイルには、テスト・インスタンスを自動化するストレージ・プロシージャが含まれています.Example:
    --C-301--------------Start of AccountID Procedure-------------------
    USE TestDatabase
    GO
    IF OBJECT_ID ('dbo.AccountID', 'P') IS NOT NULL 
        DROP PROCEDURE dbo.AccountID
    GO
    
    CREATE PROCEDURE dbo.AccountID
    AS
    BEGIN
            DECLARE @AccountIDCount int
            DECLARE @DupCount int
            DECLARE @LegalCount int
            DECLARE @Result nvarchar(10)
            DECLARE @Comments nvarchar(255)
      /* Test the account id's mapping */    
      SET @AccountIDCount = 0   
      SET @AccountIDCount = (SELECT COUNT(*) FROM [MasterData] T LEFT JOIN [TargetList] S 
                            ON CAST( T.[iAccountID] as nvarchar) =  CAST( S.[PARTYID] as nvarchar) collate Latin1_General_CI_AS
                                  WHERE T.[iAccountID] IS NULL )
      /* Check there is no duplicate account id */                            
      SET @DupCount = 0   
      SET @DupCount = (SELECT COUNT(*) FROM  [MasterData] WHERE (iAccountID in (select iAccountID from [MasterData] group by iAccountID having count(*)>1) ))
      
     /* check the account id is 10 digits */ 
     SET @LegalCount = (SELECT * FROM [Rex_DCL5_LDS_Customer_STG_MasterData] WHERE iAccountID not like '%0000000000%')
     
            IF @AccountIDCount + @DupCount + @LegalCount= 0
            BEGIN
                    SET @Result = 'PASS'
                    SET @Comments = '[iAccountID] are correct.' 
            END
          
            ELSE
            BEGIN
                    SET @Result = 'FAIL'
                    SET @Comments = 'There are: ' + CAST(@AccountIDCount as nvarchar) + 'records of T data are not contained in S data.'+ 
            CAST(@DupCount as nvarchar) + ' records are duplicated' + 
            CAST(@LegalCount as nvarchar) + ' records are illegal'
            END              
                  
            IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TestResult]') AND type in (N'U'))
            BEGIN
                  UPDATE [dbo].[TestResult] 
                  SET TestCaseResult = @Result,
                      TestLog = @Comments,
                      ExecutionTimeStamp = CURRENT_TIMESTAMP
                WHERE ProcedureName = 'AccountID'
            END   
    END
    GO
    --C-301------------End of dbo.AccountID Procedure-------------------

    テストを実行する前にsqlは、各試験例の記憶プロセスを生産し、Mainを開く.sqlは、これらのストレージ・プロシージャを呼び出します.
    このフレームワーク自体は非常に簡単で、拡張とメンテナンスが容易で、データ移行テストを行う子供靴たちのために、レンガを投げて玉を引く.
     
    本文は“ソフトウェアテストの自動化テストの道”のブログから出て、転載して作者と連絡してください!