有人可以解释我作为测试框架的cypress.io和像黄瓜这样的BDD框架之间的区别,例如: 据我所知,cypress.io是一个用于javascript的ui测试框架。 测试是用javascript编写的。 您可以使用场景来描述作为e2e-test的应用程序流。 这与行为测试类似,或者这个框架只关注ui?
有人走到街角说:黄瓜或JBehave和柏树一样。我担心这不是真的。但是可以回答的论点是什么? 我不开发网络应用程序,我很难比较两种解决方案。
我试着澄清我的问题: 想象一下,有一个带有后端服务的应用程序和一个使用这些服务的前端(web-app)。后端代表复杂的工作流程,整个应用程序应由BDD框架(例如黄瓜)进行测试。主要优点是按功能和方案描述提供的一种最新文档。它是像黄瓜这样的框架的核心。它的另一个好处当然是(也许是e2e)测试本身。为了获得价值,它需要ui测试来测试整个工作流程。例如你可以用硒和黄瓜一起处理这个问题。我认为柏树是一种像硒一样的测试框架,对吧?只有很多方面好多了。但有人可以说:“哦......柏树和黄瓜一样,因为你也可以定义情景等等......但我相信,当我们考虑BDD时,柏树必须与黄瓜结合使用而不是一个新的独立BDD工具。从我的观点来看,cypress是一个很棒的ui测试框架,但是......不是更多?!我在这里宣布了我的问题以寻找澄清答案。
答案 0 :(得分:7)
您触摸了帖子中的许多内容。我想尝试帮助您进行一些常规分类,以帮助您了解使用不同技术所能获得的收益。
BDD(行为驱动的开发):
这不是一项技术,而是更多的测试“方式”。名称和首字母缩略词与TDD相似,但方法不同。 TDD是在开始编写代码之前编写一组测试的想法,并且编写的代码在通过这些测试时应完成。在开发过程中,开发人员最常完成的工作。一个非常重要的区别是,TDD会测试实现。 BDD没有。您想否定实现,而只测试行为或应用程序的面向用户功能。这并不意味着它始终是最终用户。您可以使用BDD样式测试来测试后端。重要的是,使用BDD时,您需要关心输出,而不应该测试实现。
柏树与黄瓜:
这是两件事。赛普拉斯可以使用Cucumber(here is a link of a package that helps you do just that)默认情况下使用Mocha,这是您可以用来组织测试的另一种BDD语法...重要提示:Cucumber是一种由GIVEN,WHEN或代表前提条件的THENS,设置,被测动作以及预期结果。关于Cucumber的很酷的事情是,这些GIVEN / WHEN / THEN“步骤”调用了您的代码。为什么有人读测试很重要,他们可以确定,如果GWT步骤在不同的测试中是同一步骤,那么两者在说谎的代码下都将使用相同的代码……太酷了吧? Cucumber是一种编写高度可读的测试并允许其他人读取或写入测试的方法,现在底层代码将是相同的。您可以通过重新组织GWT来编写新的测试!您还可以使用RegEx表达式来允许测试用例的参数化。您甚至可以将这些参数连接到数据表!这是EXAMPLE
Cypress.IO与Selenium有何不同?
这本身可能是整篇文章。我将为我介绍最重要的区别。体系结构...这是link中图表的this post。那有什么重要意义?被测应用程序在赛普拉斯控制的容器内部运行。这样,测试人员就可以对请求(内部数据)和间谍或模拟数据(外部数据)进行存根。这超出了明显的网络流量。您甚至可以对浏览器的功能进行存根。赛普拉斯不支持多选项卡测试。没什么大不了的,您可以对新窗口(或选项卡)操作进行存根,并且当被测试的应用程序触发该操作时,它只是在同一窗口中打开URL。这几乎令人惊奇,因为您几乎可以使用任何功能或流量来做到这一点。如果您不具备适当的编程知识,这并不容易。开发人员可以提供帮助。
什么不是柏树
更新:跨浏览器测试现在对Cypress4.0的支持有限。涵盖Firefox和MS Edge(> = 79)。
有趣的事实:MS Edge版本号从44.xx跃升至79.xx 更改为铬引擎,以便其版本号 与Chrome同步...
目前不支持跨浏览器测试。您只能在Chrome中进行测试。
您在上面提到了后端,ui和e2e测试
赛普拉斯通常用于测试前端或UI。它可以用于集成测试,也可以用于单元测试(最好使用诸如jest之类的东西代替)。它还具有使用cy.request
命令触发REST请求的功能。您可以使用和javascript编写一些API测试,但是像postman这样的工具对于API的综合测试套件会更好。
硒可以类似地用于UI,API和e2e测试。您不能将其用于较低级别的集成测试或单元测试。他们有可以帮助您进行REST(API)测试的库,但是您想对大型套件使用API测试工具。赛普拉斯和Selenium均支持API测试,以允许发送调用以加快测试速度(登录到后端并获得添加到本地存储的令牌,而无需点击UI并让它为您处理令牌设置)。
像您这样的声音对于自动化测试还是很陌生的。起初很难,但领域很广。我将更详细地研究上面提到的一些内容。随时要求更多澄清。测试愉快!
答案 1 :(得分:3)
如果你问的是赛普拉斯是否可以用于单元测试用户界面,答案是是,from the first page of the docs:
赛普拉斯允许您编写所有类型的测试: - 端到端测试 - 集成测试 - 单元测试
尝试阅读其余文档以了解该工具的功能; Stack Overflow社区可以为您回答问题,但他们不能(当然 不会)为您做好功课。
另外:在标题和说明中尝试更简洁的问题。简洁通常是一个明确定义问题的标志,而冗长则不是,而你的长篇描述并不能很好地解决你的问题。
这个问题的核心不是Cypress和Cucumber之间的区别,它是:“Cypress可以用于不仅仅是单元测试GUI吗?我也有兴趣测试像数据库这样的东西[等等.. 。]“
Stack Overflow的一个可悲事实是,如果您不轻易回答问题,则不会有任何回复。祝你好运,将这些建设性的批评铭记于心,使你即将提出的问题可读而简洁。
我鼓励你提出可以有明确定义的事实答案的问题,而不是答案取决于主观评价的问题,例如我要提供的问题。但是这里有:
对于我没有训练的眼睛(没有黄瓜经验和几周的赛普拉斯经验),黄瓜和赛普拉斯之间的主要区别在于,黄瓜似乎一般都是针对测试,而不仅仅是针对网络,而且必须使用一些测试框架(例如Selenium)运行:https://cucumber.io/docs赛普拉斯专注于网络测试,并提供将其作为一个可安装包运行所需的一切,包括其自己的测试框架:https://www.cypress.io/how-it-works/
答案 2 :(得分:1)
使用此语法,组织中的任何人都可以编写提供给开发人员以创建功能的用户案例,然后可以在Cucumber.js test framework using Selenium或Cypress.io中将用户案例转换为自动测试。尽管Selenium是一种非常流行的工具,但它是一个更复杂的环境。赛普拉斯专注于开发人员,是硒的替代产品。尽管它确实在集成方面有一些限制,但是与Selenium相比,它学习起来更快,更容易。