Контекст — запуск тестов вручную
Допустим, у меня есть веб-приложение C# ASP.NET Core, которое я тестирую с помощью canopy. У меня есть проект навеса под названием Test
. Вот как я обычно выполняю тесты купола вручную.
В одном окне PowerShell я запускаю веб-приложение:
dotnet run
Затем в другом окне PowerShell я запускаю тестовый проект навеса:
dotnet run --project .\Test\Test.fsproj
Затем я Ctrl-C в первом окне PowerShell, чтобы остановить приложение.
Запуск тестов за один шаг
Я хотел сделать все это за один шаг из командной строки. Итак, у меня есть функция PowerShell test-app
:
function test-app()
{
reset-database
$proc = run_app
run_canopy
Stop-Process $proc.Id
}
reset-database
делает именно это. Он сбрасывает базу данных, чтобы тесты выполнялись в чистой среде:
function reset-database ()
{
dotnet ef database drop -f
dotnet ef database update
}
run_app
заботится о запуске приложения:
function run_app ()
{
$items = 'dotnet run' -split ' '
Start-Process $items[0] $items[1..100] -PassThru
}
Он возвращает процесс, который хранится в $proc
:
$proc = run_app
run_canopy
делает следующее:
- Запускает проект купола с помощью
Start-Job
. Задание хранится в$job_canopy
. - Он ожидает завершения купола, ожидая, когда
$job_canopy.State
станетCompleted
.
function run_canopy ()
{
$dir = (Resolve-Path .).Path
$code = {
param($dir)
cd $dir
dotnet run --project .\Test\Test.fsproj
}
$job_canopy = Start-Job -ScriptBlock $code -ArgumentList $dir
while ($job_canopy.State -ne 'Completed')
{
Start-Sleep -Seconds 2
}
Receive-Job $job_canopy
}
Наконец, приложение останавливается:
Stop-Process $proc.Id
До сих пор это работало довольно хорошо. Если я хочу протестировать веб-приложение, все, что мне нужно сделать, это запустить:
test-app
Вопрос
Мой вопрос: что обычно делают пользователи Canopy для тестирования своих приложений? Вы просто используете ручной подход, запускаете приложение, а затем запускаете тесты? Есть ли у вас какой-то автоматизированный подход, подобный приведенному выше? Есть ли лучший способ, который обычно используется?
Спасибо за любые предложения!