如何在Azure Pipelines中运行针对.Net和Angular的Cypress测试

f3temu5u  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(139)

我有一个.NET Angular应用程序(通过dotnet new angular configuration命令),它在/ClientApp文件夹中安装了Cypress。我可以在本地计算机上运行测试。
我想做的是能够运行一个azure管道,它会启动angular和.net应用程序。然后运行cypress测试,如果发现错误,就停止管道,否则就进入下一步。
我试过在yml管道中使用powershell脚本,也试过运行dotnet run &脚本,但当cypress运行时,它要么挂起,要么不在进程的下一步,因为cypress抱怨它无法到达localhost:44442位置。
我想知道在Azure管道中的Docker中运行这个是否会有帮助?或者Cypress是否因为在不同的任务中而无法连接到管道中的localhost域?

tjrkku2a

tjrkku2a1#

是的,您可以将**Asp.net core + Angular appDockerize并将应用程序发布到Azure Container Registry,然后使用docker-compose.yml文件创建DockerFile**,并在下面运行 YAML脚本以运行Cypress Test,参考如下:-
我发布了我的**.Net + Angular appAzure Container Registry**如下:-
x1c 0d1x的数据


我的docker-compose.yml文件:-

  • 将其包含在仓库的根目录中:-*
  1. version: '3.4'
  2. services:
  3. web:
  4. build:
  5. context: .
  6. dockerfile: Dockerfile
  7. ports:
  8. - "80:80"
  9. depends_on:
  10. - api
  11. api:
  12. build:
  13. context: .
  14. dockerfile: Dockerfile.api
  15. ports:
  16. - "5000:5000"
  17. cypress:
  18. image: cypress/included
  19. depends_on:
  20. - web
  21. volumes:
  22. - ./:/e2e
  23. environment:
  24. - CYPRESS_baseUrl=http://web:80
  25. command: ["npm", "run", "test:e2e"]

字符串

  • 我的Azure DevOps yaml管道:-*
  1. trigger:
  2. - main
  3. pool:
  4. vmImage: 'ubuntu-latest'
  5. steps:
  6. - task: DockerCompose@0
  7. inputs:
  8. containerregistrytype: 'Azure Container Registry'
  9. azureSubscription: 'xxx subscription (xxxxxxxxx6e97cb2a7)'
  10. azureContainerRegistry: '{"loginServer":"siliconacr79.azurecr.io", "id" : "/subscriptions/xxxxxx7cb2a7/resourceGroups/siliconrg98/providers/Microsoft.ContainerRegistry/registries/siliconacr79"}'
  11. dockerComposeFile: '**/docker-compose.yml'
  12. action: 'Build services'
  13. - script: |
  14. docker-compose run --rm cypress npm run test
  15. displayName: 'Run Cypress tests'


确保在同一阶段运行所有这些任务。
在运行Cypress测试后,您可以在yaml管道中使用Powershell任务检查测试结果,如下所示:

  1. - task: PowerShell@2
  2. displayName: 'Handle Cypress test results'
  3. condition: succeeded('cypress_test_run')
  4. inputs:
  5. targetType: 'inline'
  6. script: |
  7. # Get Cypress test results
  8. $cypressExitCode = (docker inspect --format='{{.State.ExitCode}}' cypress_test_run)
  9. # Stop containers
  10. docker stop dotnet-angular-app
  11. docker rm dotnet-angular-app
  12. docker rm cypress_test_run
  13. # Process Cypress test exit code
  14. if ($cypressExitCode -eq 0) {
  15. Write-Host "Cypress tests passed!"
  16. # Add additional steps
  17. } else {
  18. Write-Host "Cypress tests failed!"
  19. exit 1
  20. }

展开查看全部

相关问题