在 Azure DevOps 发布管道中运行 Java Selenium 测试

Posted

技术标签:

【中文标题】在 Azure DevOps 发布管道中运行 Java Selenium 测试【英文标题】:Run Java Selenium tests in Azure DevOps release pipeline 【发布时间】:2020-01-08 11:11:12 【问题描述】:

我正在为 AzureDevops CI/CD 管道中的 Java 项目进行 POC。我创建了一个 Maven 项目,其中包含针对独立于我的项目的演示网站运行的 Selenium 测试 (TestNG)。我想在构建管道中运行单元测试,在发布管道中运行 UI Selenium 测试。

Visual Studio test 任务似乎是我需要的构建块。我认为您可以使用 **\unit*Test.dll、**\ui*Test 等“测试文件”字段来区分单元测试和 UI 测试。不幸的是,此任务不适用于 Java 项目/不兼容。

我能够在构建期间使用 Maven 任务和 Surefire 插件运行 Selenium 测试,但请记住,我只想在构建期间运行单元测试。

我实际上能够通过以下变通方法在发布管道中运行 Selenium 测试:

在构建期间将整个项目复制到发布的 artifacts 目录(复制文件任务)。 将 Maven 任务添加到发布管道 在 pom.xml 中触发 Selenium 测试

通常,您只会将工件复制到工件目录,所以我认为这样做是一个巨大的黑客攻击。

另一个问题是 Maven 会在构建和发布期间构建项目,这很浪费。为了减少浪费,一些精明的 Maven 配置可能会有所帮助。我在考虑在发布期间跳过编译并解决依赖项,但我不知道在哪里可以找到 DevOps 生态系统中的 Maven 依赖项。

是我遗漏了什么,还是 AzureDevops 对 Java 的支持不够好?

【问题讨论】:

你以前研究过TestNG吗?我相信我曾经在 Java + Selenium 测试中使用过这个:testng.org/doc/selenium.html(你会调用一个命令行任务来调用 testng)你可以有一个 testng 文件作为参数文件,然后调用 JAR 文件每个环境。 我忘了提到我使用 testng 并配置了 testng.xml 文件。我猜该命令将类似于“java -cp”/opt/testng-6.8.jar:bin“org.testng.TestNG testng.xml”。我会试一试。不像运行 .NET core 和 Visual Studio 那样精简。 是的,我会尝试这样的事情。您可能可以使用替换令牌扩展 (marketplace.visualstudio.com/items?itemName=qetza.replacetokens) 或 Colin 扩展中的任务 (marketplace.visualstudio.com/…) 来替换每个环境的 testng 参数文件中的值,这将更加动态。您也可以只为测试运行 Maven 任务(但不熟悉与 VS 测试任务相比如何)。 @progonkpa 这个案子的进展如何?你有没有找到用 maven/testng 配置它的方法 @LeviLu-MSFT 在同一个项目中进行 UI 测试的一种策略是:构建一个 Maven 任务,目标是“包”,只使用 Surefire 插件运行单元测试。在发布一个仅使用 Failsafe 插件运行 UI 测试的 Maven 任务。您必须找到一种在发布期间跳过 Surefire/test 阶段的方法,这应该可以通过您传递给任务的配置文件和变量来实现。但从未真正实施过,SPOC 时间已经结束。 【参考方案1】:

您可以尝试在发布管道中添加一个测试任务,就像在构建管道中一样。 并在构建管道中添加复制任务,将测试代码和文件复制到构建工件并发布到发布管道。

以下步骤仅供参考(在经典视图中)。希望能有所帮助。

1、在构建管道中添加copy file任务,将所有测试文件和所有依赖设置文件复制到artifacts中的test文件夹中。

2、发布工件以发布管道

3,在发布管道中,添加任务以执行测试,就像在构建管道中一样

【讨论】:

我试过你的方法,我第一次能够在发布管道中运行测试,tnx!我想知道这是否是我们应该这样做的,将整个项目复制到 artifacts 目录应该在这里引发一些危险信号:) 它也引发了其他问题,例如如何在构建期间仅运行单元和集成测试,同时运行仅在发布期间运行 UI 测试。我认为通过一些精明的 Maven/TestNG 配置是可能的。 如果您知道运行测试所需的文件。您可以只将这些文件复制到工件。您也可以尝试创建两个 testng.xml 文件分别用于构建和发布。 如何将用户凭据存储在设置中,不建议以纯文本形式复制。有什么建议可以安全地在设置文件中动态传递它吗?

以上是关于在 Azure DevOps 发布管道中运行 Java Selenium 测试的主要内容,如果未能解决你的问题,请参考以下文章

使用调度程序和变量组运行 Azure DevOps CI 管道

Azure DevOps Pipelines - 仅在上一次运行成功时运行 YAML 管道

是否可以使用经典 UI 在 for 循环中运行 Azure DevOps 管道任务?

如何在 Azure 管道中运行 docker 容器?

Azure DevOps 发布管道的动态变量组

用于运行进程的 Azure DevOps 管道