cypress 和像黄瓜这样的 BDD 框架之间的区别

JMa*_*rky 7 cypress

有人可以向我解释 cypress.io 作为测试框架和像黄瓜这样的 BDD 框架之间的区别,例如据我所知,cypress.io 是 javascript 的 ui 测试框架。测试是用javascript编写的。您可以使用场景将通过应用程序的流程描述为 e2e-test。这类似于行为测试还是这个框架只关注用户界面?

有人走到拐角处说:Cucumber 或 JBehave 与 cypress 相同。我担心那不是真的。但是可以回答的论点是什么。我不开发网络应用程序,我很难比较这两种解决方案。

我试图澄清我的问题:想象一下有一个具有后端服务的应用程序和一个使用这些服务的前端(网络应用程序)。后端代表复杂的工作流程,整个应用程序应通过 BDD 框架(例如黄瓜)进行测试。主要的好处是通过功能和场景描述提供一种最新的文档。它是像黄瓜这样的框架的核心。另一个好处当然是(也许是 e2e)测试本身。为了有价值,它需要 ui-testing 来测试整个工作流程。例如,您可以将硒与黄瓜一起使用来解决此问题。我认为cypress是一种类似于selenium的测试框架,对吗?只是在很多方面要好得多。但有人可能会说:“哦……柏树和黄瓜一样,因为你也可以定义场景等等……但我相信,当我们考虑 BDD 时,cypress 必须与黄瓜结合使用,而不是作为新的独立 BDD 工具。从我的角度来看,cypress 是一个很棒的 ui 测试框架,但是......不是更多?!我在这里宣布我的问题是为了寻找澄清的答案。

NAN*_*fan 9

你在你的帖子中触及了很多东西。我想尝试帮助进行一些一般分类,这些分类可能会帮助您了解使用不同技术将获得什么。

BDD(行为驱动开发):
这与其说是一种技术,不如说是一种“测试方式”。在名称和首字母缩略词上类似于 TDD,但在方法上却大不相同。TDD 的思想是在开始编码之前编写一组测试,并且您编写的代码应该在通过这些测试时完成。最常由开发人员在开发过程中完成。一个非常重要的区别是 TDD 确实会测试实现。BDD 没有。您想否定实现,只测试应用程序的行为或面向用户的功能。这并不意味着它始终是最终用户。您可以使用 BDD 样式测试来测试后端。重要的是,使用 BDD,您关心输出,而不应该测试实现。

Cypress vs Cucumber:
这是两件不同的事情。Cypress 可以使用 Cucumber(这是一个包的链接,可以帮助您做到这一点) 默认情况下,它使用 Mocha,这是另一种可用于组织测试的 BDD 语法...重要提示:Cucumber 是一种语法,其中的代码由 GIVEN、WHEN 或 THEENS 引用,代表 Preconditions?setup,下面的操作测试和预期的结果。Cucumber 很酷的一点是你的代码被这些 GIVEN/WHEN/THEN“步骤”调用。为什么重要的是有人阅读测试,他们可以确定如果 GWT 步骤是不同测试中的相同步骤,两者都会使用相同的底层代码......非常酷,是吧?Cucumber 是一种编写高度可读的测试并允许其他人阅读或编写测试的方法,现在底层代码将相同。您可以通过重新组织 GWT 来编写新的测试!您还可以使用 RegEx 表达式来允许测试用例参数化。您甚至可以将这些参数连接到数据表!这是一个例子

Cypress.IO 与 Selenium 有何不同?
这可能是一篇完整的文章。我将介绍对我来说最重要的区别。架构......这是这篇文章中图表的链接. 这有什么意义?被测应用程序在由 cypress 控制的容器内运行。这允许测试人员存根请求(向内数据)和间谍或模拟数据(向外数据)。这超出了明显的网络流量。您甚至可以存根浏览器的功能。赛普拉斯不支持多标签测试。没什么大不了的,你存根新窗口(或标签)动作,当被测应用程序触发时,它只是在同一窗口中打开 URL。这简直太棒了,因为您几乎可以使用任何功能或流量来做到这一点。但是,如果您没有不错的编程知识,这并不容易。开发人员可以提供帮助。

cypress 不是什么
更新:跨浏览器测试现在对 Cypress4.0 的支持有限。涵盖 Firefox 和 MS Edge(>=79)。

有趣的事实:当 MS Edge 更改为 Chromium 引擎时,版本号从 44.xx 跃升至 79.xx,以便它们的版本号与 chrome 同步......

目前不支持跨浏览器测试。您只能在 chrome 中进行测试。

您在上面提到了后端、用户界面和端到端测试,
赛普拉斯通常用于测试前端或用户界面。它可以用于集成测试,也可以用于单元测试(最好使用类似 jest 的东西)。它还能够使用该cy.request命令触发 REST 请求。您可以使用一些 javascript 编写一些 API 测试,但是像 postman 这样的工具对于 API 的综合测试套件会更好。

Selenium 可以类似地用于 UI、API 和 e2e 测试。您不能将它用于较低级别的集成测试或单元测试。他们有可以帮助您进行 REST(API) 测试的库,但您希望将 API 测试工具用于大型套件。cypress 和 Selenium 都支持 API 测试,以允许发送调用以加快测试(登录后端并获取添加到本地存储的令牌,而不是点击 UI 并让它为您处理令牌设置)。

听起来您对自动化测试还很陌生。一开始很艰难,但这是一个很棒的领域。我会更详细地研究我上面提到的一些东西。请随时要求更多说明。测试愉快!!!

  • “目前不支持跨浏览器测试。” 现在支持 Firefox 和 Edge。 (2认同)

vag*_*ges 2

更新的答案

如果您问的是 Cypress 是否不仅可以用于 UI 单元测试,那么从文档的第一页来看,答案是肯定的

Cypress 使您能够编写所有类型的测试: - 端到端测试 - 集成测试 - 单元测试

尝试阅读文档的其余部分以了解该工具的功能;Stack Overflow 社区可以为你解答问题,但他们不能(而且肯定不会)为你做作业。

另外:尝试在标题和描述中使您的问题更加简洁。简洁通常表明问题有明确的定义,而冗长则不然,而且你的长描述不能很好地解决你的问题。

这个问题的核心不是 Cypress 和 Cucumber 之间的区别,而是:“Cypress 不仅仅可以用于 GUI 单元测试吗?我也对测试数据库等内容感兴趣[等等......]”

Stack Overflow 的一个令人遗憾的事实是,如果你的问题不易于回答,你就不会得到任何回应。祝您好运,将这些建设性的批评牢记在心,并使您即将提出的问题变得可读且简洁。

原答案

我鼓励你提出能够有明确定义、事实答案的问题,而不是那些答案取决于主观评价的问题,比如我即将给出的问题。但这里是这样的:

在我未经训练的眼中(没有使用 Cucumber 的经验,并且有几周的 Cypress 经验),Cucumber 和 Cypress 之间的主要区别在于,Cucumber 似乎旨在进行一般测试,而不仅仅是针对 Web,并且必须使用一些测试框架(例如 Selenium):https://cucumber.io/docs Cypress 专门从事网络测试,并提供将其作为一个可安装包运行所需的一切,包括其自己的测试框架:https://www.cypress .io/工作原理/

  • 谢谢。我将尽我所能。但尽管如此,你的回答还是有助于澄清。 (2认同)