【问题标题】:Cypress Across Multiple Machines [Azure Devops]Cypress 跨多台机器 [Azure Devops]
【发布时间】:2021-02-05 18:02:43
【问题描述】:

我有 20 个 Windows 10 VMS 和大约 700 个单独的柏树测试,我想要一种能够将所有这些测试分布在 20 个虚拟机上的方法,以便测试运行得更快,这可能吗?需要运行一个 Jar,以及构建运行 cypress 测试的网站。有什么建议可以加快这些过程吗?我也在使用 Azure DevOps,因为这是运行这些自动化测试的公司标准。

【问题讨论】:

  • 只是好奇,您使用的是自托管 Azure DevOps Server 吗?
  • 它们不是 Azure DevOps 服务器,它们只是公司内部的服务器,可以通过 Azure DevOps 访问,因此它们只是带有 azure 代理的标准机器。

标签: javascript azure automation devops cypress


【解决方案1】:

在不使用任何额外付费服务(如 Cypress.io 的仪表板服务)的情况下,我认为策略是:

  1. 将您的 700 个测试分成几个子集,然后
  2. 在多个代理上并行运行这些子集。

要完成 #1,您可以使用多个赛普拉斯配置文件并使用 testFiles 属性对特定的测试子集进行硬编码,或者您可以创建一个脚本来动态选择确定测试(基于某些参数),然后使用Cypress module API 实际运行您的测试。

无论您对 #1 采用哪种方法,您都必须使用 ADO 多配置(请参阅 SO 帖子 here,其中提供了有关如何设置和使用它们的指南)才能完成 #2 .从本质上讲,ADO 多配置允许您定义可以在多个代理上运行的同一组任务,同时将Multiplier 参数传递给每个代理。这个Multiplier 参数只是一个逗号分隔的字符串,例如'testSet1,testSet2,testSet3'。但是,每个代理只会收到其中一个值,例如,第一个代理可能会收到'testSet1',第二个代理可能会收到'testSet2',等等。

现在,您可以想象每个代理执行应用程序的设置,然后根据接收到的参数('testSet1''testSet2' 等)运行赛普拉斯测试的子集。

最后,您可能需要整理测试结果以便发布它们。我建议将测试结果输出到每个测试运行的共享网络驱动器中生成的确定性文件夹中。例如,如果您有 3 个代理运行 700 个测试,他们可以将他们的测试结果 XML 发布到 //shared-drive/cypress/results/<date> 文件夹中。然后,您将有一个最终的、单独的代理作业来整理测试结果并发布它们。

【讨论】:

  • 谢谢,我已经这样做了,但问题是有些测试运行时间比其他测试更长,例如 250 次测试 250 次测试另外 250 次测试运行 750 次,但第二次 250 次测试可能需要 30 分钟前 250 次测试可能需要 10 分钟,所以想更好地展开它,但看起来如果没有付费订阅是不可能的,所以我会保持原样,谢谢 :)
【解决方案2】:

在 Azure DevOps 中,您可以设置 agents 来处理此问题。然后您可以定义一个管道作业并告诉 ADO 在 parallel 中运行它,并指向您的代理池。

此外,您需要为Cypress.io's dashboard service 付费,这将启用parallel test execution

一切就绪后,您需要使用--record--parallel 标志运行测试。 Cypress.io 的服务将充当协调器,告诉每台机器要运行哪些测试,并将所有测试结果组合在一起。

【讨论】:

  • 是否有不需要付费的方法,因为我可以在 Azure Devops 上生成结果?
  • 对于赛普拉斯测试,我不知道有任何免费的现成方法可以并行化您的测试。您必须创建自己的系统,为每台机器选择测试子集,然后将结果组合成有意义的东西。
【解决方案3】:

如果您可以/想要设置基础架构,您应该查看sorry-cypress。它具有 cypress 付费服务的许多特性,最重要的是具有负载均衡的并行化。

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 2010-09-06
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2020-12-29
    相关资源
    最近更新 更多