Как интегрировать тесты tSQLt с Visual Studio Team Services?

Я разработал простой проект базы данных Ready Roll, следуя этому разделу Начало работы с ReadyRoll.

После этого я добавил тесты tSQLt в VS2015 с использованием адаптера tSQLt, выполнив следующие действия: Запуск тестов в ReadyRoll с адаптером tSQLt.

Затем проверьте мой код в VSTS и создайте шаги сборки и выпуска, следуя этой ссылке.

Create-VSTS-ТПО-сборки

Create-VSTS-ТПО-релиз

tsqlt-тесты-с-наглядных-студийных команде услуг

Запустить настройку задачи тестирования tSQLt на уровне выпуска введите описание изображения здесь

Я немного запутался, какой путь указать в разделе "Выходные данные результатов теста" в конфигурации "Выполнить тестовые задачи tSQLt" на уровне выпуска.

Итак, я получаю сообщение об ошибке на уровне выпуска в задаче "Выполнить тесты tSQLt", как показано на рисунке ниже.

введите описание изображения здесь

Может кто-нибудь сказать, пожалуйста, как решить вышеуказанную проблему?

2 ответа

Решение

Эта проблема теперь исправлена ​​в версии 2.1.4 расширения VSTS ReadyRoll.

Проблемные линии:

Invoke-VstsTool -FileName 'sqlcmd.exe' -Arguments "-S $databaseServer -d $databaseName -i 'RunTests.sql'"
Invoke-VstsTool -FileName 'sqlcmd.exe' -Arguments "-S $databaseServer -d $databaseName -i 'OutputResults.sql' -o $outputPath"

были заменены на:

$connectionParams = "-S ""$databaseServer"" -d ""$databaseName"""
Invoke-VstsTool -RequireExitCodeZero -FileName 'sqlcmd.exe' -Arguments "-b $connectionParams -i RunTests.sql"
Invoke-VstsTool -RequireExitCodeZero -FileName 'sqlcmd.exe' -Arguments "-b $connectionParams -i OutputResults.sql -o ""$outputPath"""

Приносим извинения за доставленные неудобства.

Существует проблема в задаче Run tsSQLt Tests (может воспроизвести эту проблему).

Исходный код (его можно найти в рабочей папке агента, например: _work / _task / RunDatabaseTestsxxx):

RunDatabaseTests.ps1:

[CmdletBinding(DefaultParameterSetName = 'None')]
param()
$global:ErrorActionPreference = 'Stop'
Import-Module -Name "$PSScriptRoot\ps_modules\TaskHelpers"

[string]$outputPath = Get-VstsInput -Name OutputPath
[string]$databaseServer = Get-VstsInput -Name DatabaseServer
[string]$databaseName = Get-VstsInput -Name DatabaseName
[bool]$useWindowsAuth = Get-VstsInput -Name UseWindowsAuth -AsBool
[string]$databaseUserName = Get-VstsInput -Name DatabaseUserName
[string]$databasePassword = Get-VstsInput -Name DatabasePassword

Write-VstsTaskVerbose -Message 'Ensuring the path to sqlcmd is present in env:PATH'
Initialize-SqlCmdInPathEnvironmentVariable

[string]$sourcesDirectory = Get-VstsTaskVariable -Name 'Build.SourcesDirectory'

if(!$sourcesDirectory)
{
  Write-VstsTaskVerbose -Message 'Build.SourcesDirectory was not found as a VSTS Task variable'
  Write-VstsTaskVerbose -Message 'Looking for Agent.ReleaseDirectory to use as source directory instead'
  # For RM, look for the test assemblies under the release directory.
  $sourcesDirectory = Get-VstsTaskVariable -Name 'Agent.ReleaseDirectory'
}

if(!$sourcesDirectory)
{
  $msg = 'No source directory found'
  Exit-WithError $msg
}

Write-VstsTaskVerbose -Message 'Source directory found'
Write-VstsTaskDebug -Message "buildSourcesDirectory = $buildSourcesDirectory"

if ([System.IO.Path]::IsPathRooted($outputPath) -eq $False)
{
  $outputPath = Join-Path $sourcesDirectory $outputPath
}

Write-VstsTaskDebug -Message "OutputPath(absolute) = $outputPath"

if ($useWindowsAuth -eq $True) {
  Write-VstsTaskVerbose -Message 'Starting sqlcmd with Windows Authentication'
  Invoke-VstsTool -FileName 'sqlcmd.exe' -Arguments "-S $databaseServer -d $databaseName -i 'RunTests.sql'"
  Invoke-VstsTool -FileName 'sqlcmd.exe' -Arguments "-S $databaseServer -d $databaseName -i 'OutputResults.sql' -o $outputPath"
}
else {
  Write-VstsTaskVerbose -Message 'Starting sqlcmd with SQL Authentication'
  Invoke-VstsTool -FileName 'sqlcmd.exe' -Arguments "-S $databaseServer -d $databaseName -U $databaseUserName -P $databasePassword -i 'RunTests.sql'"
  Invoke-VstsTool -FileName 'sqlcmd.exe' -Arguments "-S $databaseServer -d $databaseName -U $databaseUserName -P $databasePassword -i 'OutputResults.sql' -o $outputPath"
}

# sqlcmd limits line length to 2034 characters and inserts new lines. Remove these.
$x = Get-Content $outputPath -Raw
$x.Replace("`r`n", "") > $outputPath

RunTests.sql:

EXEC [tSQLt].[RunAll];

OutputResults.sql:

:XML ON
EXEC [tSQLt].[XmlResultFormatter];

Я могу запустить тест по телефону "sqlcmd.exe" -S v-tinmo-12r2 -d ReadyRollDemo2 -U starain -P User@123 -i RunTests.sql команда (удалить одинарные кавычки из RunTests.sql, также можно заменить одинарные кавычки))

Таким образом, вы можете запустить тестирование и получить отчеты, вызвав sqlcmd.exe с помощью задач командной строки, или вы можете обратиться к исходному коду задачи Run tSQLt Tests, чтобы настроить задачу сборки / выпуска.

Другие вопросы по тегам