我应该将 2e2 测试放在管道中的 WebAppDeployment 之前还是之后?

Should I put my 2e2 tests before or after my WebAppDeployment in my pipeline?

希望有人能帮助我

我正在 dotnet 中开发 api,我在 yaml 中使用 azure devops 和管道。

我已经完成了 api 的 2e2 测试,我基本上对我正在开发的 api 进行了真正的调用,以测试应用程序中的真实用户流。

我的问题应该是:

1- 在部署到我的 webapp 之前执行 2e2test 任务,让我知道在将其部署到资源之前存在问题,但问题是我不会用当前的更改进行测试提交(因为我会用前一个进行测试,因为我还没有部署资源)

2-在部署到我的 webapp 之后执行任务 2e2test,允许我使用我在提交中所做的更改反映在资源中来执行测试,这样我就知道我所做的有问题或没有,但有问题,因为资源已部署,如果有问题,它已经污染了我的 webapp。

我正在处理的 yaml 是:

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

trigger:
- development

pool:
  vmImage: 'windows-latest'
  
steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet publish'
  inputs:
    command: publish
    publishWebProjects: false
    projects: '**/ChatbotService/*.csproj'
    zipAfterPublish: true
    modifyOutputPath: true


- task: DotNetCoreCLI@2
  displayName: 'dotnet MockUnitTest'
  inputs:
    command: test
    projects: '**/*Tests/MockUnitTest/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'

- task: DotNetCoreCLI@2
  displayName: 'dotnet E2ETest'
  inputs:
    command: test
    projects: '**/*Tests/E2ETest/*.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'

- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'bla blab bla'
    appType: 'webApp'
    WebAppName: 'webapp-chatbotservice-dev'
    packageForLinux: '$(System.DefaultWorkingDirectory)/ChatbotService/**/*.zip'
    AppSettings: '-ASPNETCORE_ENVIRONMENT Development'

您应该先部署然后 运行 您的 e-2-e 测试而不是生产。在生产环境中,您应该 运行 smoke tests 这是一种 e-2-e 测试,可以在不改变应用状态的情况下测试应用的关键部分。 (当然在部署后 运行 它们是有意义的)

所以它可以像这样在高级别:

- build stage
- deploy to test env stage
  - run e-2-e test
- deploy to prod env stage
  - run smoke test

如果您 运行 在未更新的环境上进行测试,则始终存在风险,因为您的测试可能会验证尚未部署的应用程序部分。