Javascript 如何在Cypress中动态生成测试用例?

Javascript 如何在Cypress中动态生成测试用例?,javascript,cypress,Javascript,Cypress,当我存储Cypress测试所需的测试数据时,我有一个JSON文件,但我想根据对象键/值的内容动态生成特定的it块(不是每个对象都有相同的值或需要执行相同的步骤) 例如,如果我有以下testData对象: [ { "name": "Do Something", "type": "A", }, { "name":

当我存储Cypress测试所需的测试数据时,我有一个JSON文件,但我想根据对象键/值的内容动态生成特定的
it
块(不是每个对象都有相同的值或需要执行相同的步骤)

例如,如果我有以下testData对象:

[
    {
        "name": "Do Something",
        "type": "A",
        
    },
    {
        "name": "Do Something",
        "type": "B",
        
    },
    {
        "name": "Do Something",
        "type": "C",
        
    },
]
并非所有的
类型都相同,因此需要为其运行调用不同的测试


在Cypress中实现这一点的最佳方法是什么?有没有一种方法不涉及if/else块?

中有一个例子

共有3个事务提要,每个都在本规范中进行了全面测试:
我想做类似的事情。我浏览了上面发布的所有链接,以下是我的发现:

你要找的是

有时,您希望遍历项目列表,并为每个项目创建一个单独的测试。这些测试称为动态测试。动态测试的示例包括:

  • 对不同的视口分辨率运行相同的测试
  • 对站点的不同子域运行相同的测试
  • 根据提取的数据生成测试

现在,有几种处理“动态数据”的方法。我强烈建议你,柏树的作者。(2018年,2700万)

他在8:44左右讲述了处理动态数据的3种不同方法

总结如下:

现在,您想要使用哪种策略(或者策略,因为它们不是相互排斥的)取决于您的约束,由您决定

顺便说一句,我也强烈建议大家仔细阅读,这里有很多有用的提示。幸运的是,其中一个视频示例关注“”并使用“存根请求”策略

您可能正在使用React/Vue全局数据存储(Redux等),在这种情况下,Cypress有一个非常简单的技巧来访问您的存储,如上面的视频链接所示

常见问题解答部分“”也可能有用。另外,“,”很好知道,这就是上面的技巧的基础

用例 现在,根据我个人的需要,我将举一个具体的例子

我正在构建一个多单租户()应用程序,其中每个“客户”都有自己的应用程序。在我的GitHub操作启动并触发Vercel部署后,我正在运行Cypress。一旦应用程序部署完毕,Cypress就开始发挥作用

问题是,每个客户都有不同的数据集,每个配置可能彼此略有不同(多语言等)。因此,我无法预先知道应该运行哪些测试。例如,测试页脚中是否存在“Change language”(更改语言)按钮对单一语言的客户没有意义,这将导致失败

因此,我需要动态运行大部分测试

在观看了上述视频并阅读了各种资源后,我仍然对“动态数据策略”犹豫不决。我要存根吗?我是否应该以某种方式使用客户数据?(因为我已经拿到了)

每种方法都有优点/缺点。例如,如果我使用存根,我可以构建各种场景并测试所有场景。但我需要编写大量硬编码配置,维护测试可能会很枯燥和复杂。 另一方面,使用客户数据不允许我测试所有潜在的场景


最终,我发现我真正需要的是确保当前的客户平台正常工作。我不关心测试所有东西,我只需要确保它对该客户有效。最终,我可以为所有场景编写测试,但它们是有条件的,并且每个客户只运行少数测试。但这没什么大不了的,也不那么麻烦,因为我不需要模拟/存根任何东西,我只需要使用实时数据。此外,我不会与真实数据不同步(与模拟/存根时不同),因为这是我用于真实数据的方式。

您可以通过在一些数据上的循环中调用
it
来动态创建测试。但“并非每个对象都有相同的值或需要执行相同的步骤”过于宽泛,无法给出任何具体的答案。您需要提供示例输入数据和所需输出。您可能希望在9:00分钟左右检查“动态测试”配方()和数据驱动测试,例如在本视频()中。将示例JSON文件添加到操作系统。您可能会从以下帖子中得到启发: