首页 > 解决方案 > 在通过管道触发的 Azure VM 上运行自动化 UI 测试

问题描述

我们有一个非常复杂的(非网络,.NET)软件系统,因此我们开始创建自动化 UI 测试作为测试金字塔的最后一步。这些测试大多是基于 UIA3 和 FlaUI 的系统不同部分之间的 end-2-end 测试。我们称它们为用例测试。

现在的想法是在系统中预置一个 Azure VM,定期将(新开发的)UI 测试部署到该机器并在那里运行它们。(旁注:目前,由于复杂性,我们希望避免系统本身的定期推出。每季度一次对系统来说已经足够了。更有趣的是扩展 UI 测试套件并获得它的用例-测试自动运行。)

在 Azure 构建管道中,我们运行 UI 测试套件本身的一些基本单元测试(仅解决我们在用例测试中使用的基本非 UI 功能)。然后,我们将构建工件(带有用例测试和 xUnit 控制台运行程序的程序集)复制到带有预安装软件系统的 Azure VM)。

到目前为止,一切都很顺利。但是我们如何在那里运行用例测试呢?要运行应用程序(WinForms/WPF 应用程序),它需要一个交互式会话。我不清楚如何远程交互式登录、触发测试……)。

非常感谢任何帮助、提示和想法。

谢谢,马尔科

标签: azureui-testing

解决方案


解决方案(草案,PoC)

经过一些调查和大量尝试和错误,解决方案的草案是这样的:

  • 复制所有工件以部署在一个文件夹中(例如项目根/部署)
    我使用 FAKE 作为我的构建环境,它看起来像这样:

    Target.create "Provide-Deployment-Package" (fun _ ->
        // Setup some constants for later usage
        let outputDir = projectRootDir </> "src" </> "UseCaseTests" </> "UseCaseTests" </> "bin" </> configuration
        let xUnitRunnerDir = projectRootDir </> "packages" </> "tests" </> "xunit.runner.console" </> "tools" </> "net472"
        let xUnitTestAdapter = projectRootDir </> "packages" </> "tests" </> "xunit.runner.visualstudio" </> "build" </> "_common"
        let deployDir = projectRootDir </> "deploy"
    
        Directory.ensure(deployDir) |> ignore
    
        Shell.copyRecursiveTo true deployDir outputDir |> ignore
        Shell.copyRecursiveTo true deployDir xUnitRunnerDir |> ignore
        Shell.copyRecursiveTo true deployDir xUnitTestAdapter |> ignore
    )
    
  • 在您的(yaml)构建管道中添加发布任务

    - publish: $(System.DefaultWorkingDirectory)/deploy
      artifact: UC-Test-Artifacts
    
  • 从代理创建一个令牌以供以后使用

  • 创建代理池

    • https://dev.azure.com/{your-organization)/_settings/agentpools
    • 添加一个池,例如命名它bvms
  • 创建代理

    • 点击New Agent
    • 按照打开对话框的说明Get the Agent
      (在您的 VM 上运行它,稍后应该运行 UI 测试)
  • 配置具有 2 个代理作业的发布管道

    • 代理 1:

    • 代理池:Azrue Pipelines

    • 代理规格:vs2017-win2016
    • 神器下载:UC-Test-Artifacts

    • 代理 2:

    • 代理池:bvms

    • 代理规格:vs2017-win2016
    • 神器下载:UC-Test-Artifacts
  • 代理1的步骤:

    • Azure 文件副本

    • 资源:$(System.DefaultWorkingDirectory)/UC-Test-Artifacts/UC-Test-Artifacts

    • 目的地类型:Azure VM
    • VM 管理员帐户的凭据
    • 目标文件夹:c:\_temp
  • 代理2的步骤:

    • 电源外壳脚本

    • 脚本:c:\_temp\xunit.console.exe c:\_temp\Bvms.UiAutomation.UseCaseTests.dll

备注:将工件复制到 VM 的步骤可能会替换为发布机制背后的选项。

一些资源


推荐阅读