Kev*_*161 5 javascript cypress
我在存储 Cypress 测试所需的测试数据时有一个 JSON 文件,但我想it根据对象键/值的内容动态生成特定块(并非每个对象都具有相同的值或需要执行相同的步骤) )。
例如,如果我有以下 testData 对象:
[
{
"name": "Do Something",
"type": "A",
},
{
"name": "Do Something",
"type": "B",
},
{
"name": "Do Something",
"type": "C",
},
]
Run Code Online (Sandbox Code Playgroud)
并非所有的测试都相同,type因此需要对其运行进行不同的测试。
在 Cypress 中实现这一目标的最佳方法是什么?有没有一种方法不涉及 if/else 块?
我想做类似的事情。我浏览了上面发布的所有链接,以下是我的发现:
您正在寻找的称为“动态测试”。
有时您想要迭代项目列表,并为每个项目创建一个单独的测试。这些测试称为动态测试。动态测试的例子有:
- 针对不同的视口分辨率运行相同的测试
- 针对站点的不同子域运行相同的测试
- 根据获取的数据生成测试
https://docs.cypress.io/examples/examples/tutorials.html#Best-Practices
现在,有几种处理“动态数据”的方法。我强烈建议观看Cypress 的作者Brian Mann 的演讲。(2018年,2700万)
他在 8:44 左右谈到了处理动态数据的 3 种不同方法。
总结如下:
现在,您想要使用哪种策略(或多种策略,因为它们并不相互排斥)取决于您的限制,由您决定。
顺便说一句,我还强烈建议您阅读最佳实践,那里有很多有用的提示。幸运的是,其中一个视频示例重点关注“过滤器和数据驱动测试”并使用“存根请求”策略。
您可能正在使用 React/Vue 全局数据存储(Redux 等),在这种情况下,Cypress 有一个非常简单的技巧可以访问您的存储,如上面的视频链接所示。
FAQ 部分“我的测试可以与 Redux / Vuex 数据存储交互吗? ”也可能有用。另外,“有什么方法可以检测我的应用程序是否在 Cypress 下运行? ”很高兴知道,这就是上面的技巧所基于的。
现在,我将根据我个人的需求举一个具体的例子。
我正在构建一个多单租户(MST)应用程序,其中每个“客户”都有自己的应用程序。在我的 GitHub Actions 启动并触发 Vercel 部署后,我正在运行 Cypress。一旦部署了应用程序,Cypress 就可以发挥作用了。
问题是,每个客户都有不同的数据集,并且每种配置可能彼此略有不同(多语言等)。因此,我无法预先知道应该运行哪些测试。例如,测试页脚中是否存在“更改语言”按钮对于单一语言客户来说没有意义,并且会导致失败。
因此,我需要动态运行大部分测试。
看完上面的视频并阅读了各种资源后,我对“动态数据策略”仍然犹豫不决。我应该存根吗?我应该以某种方式使用客户数据吗?(因为我已经获取它们了)
每种都有优点/缺点。例如,如果我存根,我可以构建各种场景并测试所有场景。但我需要编写大量硬编码配置,并且维护测试可能会很无聊且复杂。另一方面,使用客户数据不允许我测试所有潜在的场景。
最终,我认为我真正需要的是确保当前的客户平台正常运行。我不关心测试所有内容,我只需要确保它适用于该客户。最终,我可以为所有场景编写测试,但它们是有条件的,并且只会为每个客户运行少数测试。但这不是什么大问题,而且麻烦也少得多,因为我不需要模拟/存根任何东西,我可以只使用实时数据。另外,我不会与真实数据不同步(与模拟/存根时不同),因为这就是我真正使用的数据。
| 归档时间: |
|
| 查看次数: |
8948 次 |
| 最近记录: |