使用 DB 文件在 Azure Devops 上运行测试

问题描述 投票:0回答:1

有没有办法在Azure Devops流水线上使用其中一个任务创建一个DB文件?

我的思路是在代理上创建一个localdb(使用VS),然后像使用VS一样在该DB文件上运行单元测试(SSDT)。我可以创建db文件Tools>connect db>Sql server db文件,并放入一个名字。我可以连接到它并运行测试。好像我不能在Azure devops pipeline上做这个。

我知道首选的方式是分配一个Azure SQL服务器,并对这些测试运行,但DB是非常小的,如果我可以对db文件运行这些似乎是一个更好的主意。

c# unit-testing azure-devops azure-pipelines sql-server-data-tools
1个回答
0
投票

使用DB文件在Azure Devops上运行测试

作为解决方法,你可以尝试检查LocalDb文件(mdf和ldf),将文件复制到输出,并将连接字符串改为使用当前执行路径。

enter image description here

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
     optionsBuilder.UseSqlServer($”Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog=Contacts;AttachDbFilename={AppDomain.CurrentDomain.BaseDirectory}Core\\IntegrationTests\\Contacts.mdf;Integrated Security=True”);
}

你可以检查文件 在您的构建服务器上使用SQL LocalDb进行集成测试。 的一些细节。

希望对大家有所帮助。


0
投票

基本上我找到了一种方法,可以在代理上全部完成。但是,如果你使用的是新的语法,代理的localdb必须要更新。

- task: CopyFiles@2
  inputs:
    Contents: '**/Output/*.dacpac'
    flattenFolders: true
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |      
      sqllocaldb start MSSQLLocalDB
      sqllocaldb info MSSQLLocalDB

      #import SqlServer module
      Import-Module -Name "SqlServer"

      # create variable with SQL to execute
      $sql = "
      CREATE DATABASE [MyDatabase]
        CONTAINMENT = NONE
        ON  PRIMARY
        ( NAME = N'MyDatabase', FILENAME = N'd:\a\1\s\testing.Data\test\bin\Output\MyDatabase.mdf' , SIZE = 1048576KB , FILEGROWTH = 262144KB )
        LOG ON
        ( NAME = N'MyDatabase_log', FILENAME = N'd:\a\1\s\testing.Data\test\bin\Output\MyDatabase_log.ldf' , SIZE = 524288KB , FILEGROWTH = 131072KB )
      GO

      USE [master]
      GO
      ALTER DATABASE [MyDatabase] SET RECOVERY SIMPLE WITH NO_WAIT
      GO

      ALTER AUTHORIZATION ON DATABASE::[MyDatabase] TO [sa]
      GO "
      Invoke-SqlCmd -ServerInstance "(localdb)\MSSQLLocalDB" -database master -Query $sql

- task: SqlDacpacDeploymentOnMachineGroup@0
  inputs:
    TaskType: 'dacpac'
    DacpacFile: '$(Build.ArtifactStagingDirectory)/*.dacpac'
    TargetMethod: 'connectionString'
    ConnectionString: 'Data Source=(localdb)\.;Initial Catalog=MyDatabase;Integrated Security=True;'

有了这个方法,你可以将生成的.mdf文件附加到你的localdb上,然后将你的dacpac发布到上面。然后,如果你想运行你的测试,你可以这样做。

© www.soinside.com 2019 - 2024. All rights reserved.