testing - Azure DevOps - 将自动化测试与应用发布管道分离
问题描述
我们在 Azure 中托管了一系列 Web 应用程序,每个应用程序都通过其自己的 CI/CD 管道部署到三个独立的环境(DEV/TEST/PRD)中,并在 Web 应用程序之后触发自动化测试阶段(API 和 Selenium UI 测试)部署到 DEV 和 TEST 环境中。每个 UI 测试程序集在每个环境中重复多次,使用不同的浏览器/屏幕尺寸(代表台式机、平板电脑和移动设备,通过将参数传递到 VS 测试任务中进行配置),并在整个测试过程中捕获屏幕截图以确保我们的 UI 是在一系列设备/浏览器上正常运行。我们的应用程序依赖第三方连接来实现很多功能,因此我们的一些自动化测试也执行使用此连接的操作。
我们首先正在寻找一种方法来触发自动化测试块,而无需直接从 App CD 发布管道中引用测试项目工件。这将允许我们在需要时对自动化测试进行任何修改,而无需在需要更改测试项目时重新部署我们的应用程序代码。除此之外,我们还希望能够随时重新运行任何选定的失败测试。我们已经在 VS 测试任务中使用了“重新运行失败的测试”选项,但是在测试运行开始后,一些测试可能会在长达 20-30 分钟内反复失败,这主要是由于我们对第 3 方连接/模拟器的依赖。VS 测试任务的一个选项是使用测试过滤(按类别/测试名称),虽然这将根据需要运行单个测试,
我们一直在研究使用 Azure DevOps 的测试计划、测试套件和测试用例作为提前规划自动化测试的一种方式。这可以提供在必要时随时按需运行测试的能力,但是在触发按需自动化测试时处理多个环境和配置变量很困难,因为 Azure DevOps 的测试计划不支持配置: https://docs。 microsoft.com/en-us/azure/devops/test/run-automated-tests-from-test-hub?view=azure-devops#q-what-happens-if-i-select-multiple-configurations-for-相同的测试
可以通过为每个所需的配置创建多个测试计划来解决这个问题,但这看起来会非常混乱并且很容易出现人为错误。
理想情况下,我们将为部署新应用程序版本的每个环境创建一个新的测试计划。这将包含我们想要运行的所有测试,根据所需的浏览器配置进行复制,并且即使我们需要重新运行任何测试,也会给出每个环境的最终测试通过率。然后,我们将有一个发布管道来编排运行测试,其中每个管道阶段包含从具有所需配置的新发布测试计划运行测试的步骤。但是,这将需要一个步骤来确保新的测试管道版本针对正确的测试计划。
我需要回答的问题是:
- 有没有办法从应用程序部署管道中触发新的测试发布管道(不引用测试项目工件)?这似乎没有任务(代理托管或无代理)。
- 当应用部署发布管道被批准到下一个环境时,是否可以记录完成的测试计划的结果?我们不喜欢仅手动干预步骤的想法,任何具有访问权限的开发人员都可以批准部署到新环境而无需运行任何测试。
- 有没有办法从现有测试项目中自动生成 Azure DevOps 中的完整测试计划(套件和测试用例)?由于每个测试都必须手动与 Visual Studio 中的测试用例关联 - 总是存在人为错误的可能性,这意味着测试与测试用例无关(测试将不会运行),或者与错误的测试用例相关联。
- 有没有办法在创建新版本时为管道中的每个 VS 测试任务自动选择一个新的测试计划?或者,我们是否可以强制用户在测试管道开始时选择测试计划?是否可以将管道变量用于 VS 测试任务中的“测试计划”测试选择选项?
- 是否可以克隆现有的测试计划以避免重复设置相同的测试用例?
感谢您的时间。
解决方案
推荐阅读
- swift - 调用类给出错误 EXC_BAD_INSTRUCTION
- ios - 无法同时满足约束。我不确定哪个代码导致了冲突
- apache-spark - Spark 无法检测到 ES 版本 - 如果网络/Elasticsearch 集群不可访问,通常会发生这种情况
- google-app-engine - 我可以使用负载均衡器/URL 映射器将流量路由到 Google App Engine 还是...?
- swift - Swift 5.+ - 使类可散列?
- python - Python tkinter PhotoImage 不能正常工作?
- android - Android - 让定位服务工作
- java - 我的 mockito 间谍方法不起作用。类型不匹配错误
- c++ - 为什么我不能将 RichTextBox 的成员函数 AppendText 与字符串变量一起使用,但它可以很好地处理作为参数编写的文本?
- android - Android 检测测试在测试使用 RoomDatabase.withTransaction 的挂起函数时冻结