Тестирование с помощью Canopy за один шаг командной строки

Контекст — запуск тестов вручную

Допустим, у меня есть веб-приложение 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 для тестирования своих приложений? Вы просто используете ручной подход, запускаете приложение, а затем запускаете тесты? Есть ли у вас какой-то автоматизированный подход, подобный приведенному выше? Есть ли лучший способ, который обычно используется?

Спасибо за любые предложения!


person dharmatech    schedule 01.05.2021    source источник


Ответы (1)


Ваш подход довольно умен, и мне нравится он для локальной разработки, когда вы можете запускать приложения И тесты с помощью одной команды. Однако для конвейера CI/CD я бы предложил разделить его на отдельные этапы — Canopy — это отдельное приложение, и с ним следует обращаться следующим образом:

  1. Создайте приложение
  2. Запустите тесты приложения (модульные тесты)
  3. Публикация артефактов приложения
  4. Развертывание в тестовой среде + запуск

То же самое и с навесом

  1. Построить приложение Canopy
  2. Публикация артефактов приложения
  3. Развертывание в среде для запуска тестов пользовательского интерфейса + запуск тестов

Разделение процессов жизненного цикла/развертывания между тестируемым приложением и Canopy может помочь вам при работе в больших командах с разделенными обязанностями (разработка, контроль качества). Но для быстрого локального развития в вашем подходе нет ничего плохого.

person Dzoukr    schedule 05.05.2021