使用数据库文件 运行 在 Azure Devops 上进行测试
Using a DB File to run Tests on Azure Devops
有没有办法使用其中一项任务在 Azure Devops 管道上创建数据库文件?
我的思路是在代理上创建一个 localdb(使用 VS),然后 运行 像我对 VS 所做的那样对该数据库文件进行单元测试 (SSDT)。我可以创建数据库文件工具>连接数据库> Sql 服务器数据库文件并输入名称。我可以连接到它并 运行 进行测试。似乎我无法在 Azure devops 管道上执行此操作。
我知道首选方法是分配一个 Azure SQL 服务器和 运行 针对这些的测试,但是数据库非常小,如果我可以 运行 针对数据库的测试文件似乎是个更好的主意。
Using a DB File to run Tests on Azure Devops
作为解决方法,您可以尝试签入 LocalDb 文件(mdf 和 ldf),将文件复制到输出并更改连接字符串以使用当前执行路径:
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”);
}
您可以查看文档 Integration Testing with SQL LocalDb on your build server 了解一些细节。
希望对您有所帮助。
基本上我找到了一种在代理上完成所有操作的方法。但是,如果您使用更新的语法,则必须更新代理 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\s\testing.Data\test\bin\Output\MyDatabase.mdf' , SIZE = 1048576KB , FILEGROWTH = 262144KB )
LOG ON
( NAME = N'MyDatabase_log', FILENAME = N'd:\a\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 发布到它。那么如果你想运行你的测试,你可以这样做。
有没有办法使用其中一项任务在 Azure Devops 管道上创建数据库文件?
我的思路是在代理上创建一个 localdb(使用 VS),然后 运行 像我对 VS 所做的那样对该数据库文件进行单元测试 (SSDT)。我可以创建数据库文件工具>连接数据库> Sql 服务器数据库文件并输入名称。我可以连接到它并 运行 进行测试。似乎我无法在 Azure devops 管道上执行此操作。
我知道首选方法是分配一个 Azure SQL 服务器和 运行 针对这些的测试,但是数据库非常小,如果我可以 运行 针对数据库的测试文件似乎是个更好的主意。
Using a DB File to run Tests on Azure Devops
作为解决方法,您可以尝试签入 LocalDb 文件(mdf 和 ldf),将文件复制到输出并更改连接字符串以使用当前执行路径:
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”);
}
您可以查看文档 Integration Testing with SQL LocalDb on your build server 了解一些细节。
希望对您有所帮助。
基本上我找到了一种在代理上完成所有操作的方法。但是,如果您使用更新的语法,则必须更新代理 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\s\testing.Data\test\bin\Output\MyDatabase.mdf' , SIZE = 1048576KB , FILEGROWTH = 262144KB )
LOG ON
( NAME = N'MyDatabase_log', FILENAME = N'd:\a\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 发布到它。那么如果你想运行你的测试,你可以这样做。