8

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

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

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

4

3 回答 3

9

您在帖子中涉及很多内容。我想尝试帮助您进行一些通用分类,这些分类可能有助于您了解使用不同技术会得到什么。

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

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

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

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

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

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

您在 Cypress 上面提到了后端、ui 和 e2e 测试
通常用于测试前端或 UI。它可以用于集成测试,也可以用于单元测试(使用 jest 之类的东西可能会更好)。它还可以使用cy.request命令触发 REST 请求。您可以使用一些 javascript 编写一些 API 测试,但是像 postman 这样的工具对于 API 的全面测试套件会更好。

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

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

于 2020-01-08T21:40:26.580 回答
2

更新的答案

如果您要问的是赛普拉斯是否可用于对 UI 进行单元测试,答案是肯定的,来自文档的第一页

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

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

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

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

Stack Overflow 的一个可悲事实是,如果你不让你的问题易于回答,你就不会做出任何回应。祝您好运,将这种建设性的批评牢记在心,并使您即将提出的问题易于阅读和简洁。

原始答案

我鼓励您提出可以有明确定义的事实答案的问题,而不是答案取决于主观评价的问题,例如我将要给出的问题。但这里有:

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

于 2017-11-14T11:48:13.813 回答
1

行为驱动开发 (BDD) 是一种传达软件行为的方法,可以由开发人员和非技术团队(如业务分析师)共享。BDD 以易于理解的纯文本编写。Gherkin 是用于此的语法,下面的示例显示了使用 Given、When、Then 结构的测试场景: 测试场景

使用这种语法,组织中的任何人都可以编写提供给开发人员以创建功能的用户故事,然后可以使用 Selenium或 Cypress.io 在 Cucumber.js 测试框架中将用户故事转换为自动化测试。尽管 Selenium 是一个非常流行的工具,但它是一个更复杂的设置环境。Cypress 以开发人员为中心,是 Selenium 的替代品。尽管它在集成方面确实有一些限制,但与 Selenium 相比,它学习起来更快更容易。

于 2020-08-18T09:37:07.377 回答