网红端到端测试神器Cypress开箱试用报告

最新一期TW的技术雷达上出现了一款端到端的开源测试神器Cypress,号称是不懂代码的测试人员、业务人员都可以使用,同时还不依赖于已经是端到端测试扛把子的Selenium,CC先生很好奇,以下是开箱试用报告:

  1. 安装cypress
    https://www.cypress.io/
    cypress官网下载,Windows下的安装包大概有233M,下载耗费时间依赖于你的网速咯。
    也可以直接到github的cypress项目下获取 :
    https://github.com/cypress-io/cypress
    Windows下解压后点击cypress的安装文件,一路默认,直到出现以下画面:
    install.jpeg

1)打开cypress客户端, 点击箭头位置,通过资源管理器选择/CypressTest目录或者新建一个目录名称为CypressTest(此处为自己取的名字,你也可以写其它名称)
2)如果/CypressTest目录下没有cypress目录,那么cypress就会在CypressTest目录下新建cypress目录,并初始化一些文件


install default.png

想使用npm安装的小伙伴先要需要配置node的环境。(此环节可Google)

  1. 初始化cypress
    安装完成后安装目录下有一个cypress目录和cypress.json的配置文件,cypress目录下的结构如下:
|-- fixtures
|-- integration
|   `-- example_spec.js
|-- plugins
|   `-- index.js
`-- support
    |-- commands.js
    `-- index.js

fixtures 文件夹存放自定义 json 文件,integration 文件夹编写测试,plugins 和 support 是非必须使用的文件夹,需要自定义指令的时候会用到。

  1. 运行Cypress
    可以点击examples里的任意一个js文件,它会单独打开一个浏览器并开始执行。下图是执行了actions_example.js的情况。


    actions_example.png
  2. 编写一个测试用例
    设计一个常见的登录功能的测试流程

  3. 访问某个页面

  4. 查找DOM进行交互,例如输入,点击,选择之类

  5. 进行断言

describe('InfoQ登录测试', () => {
  it('登录页面', () => {
    cy.visit('https://account.geekbang.org/infoq/signin?redirect=https%3A%2F%2Fwww.infoq.cn%2F')
    cy.get('input[name="cellphone"]').eq(0).type('18013457889')
    cy.get('input[name="password"]').eq(0).type('password')
    cy.get('input[value="登录"]').click()

    cy.get('body').should('contain', 'Bad login')
  })
})

运行后得到以后结果:


login_result.png

可以看到以上的运行结果时有错误的提示,出错的地方来自于DOM中“登录”按钮没有被识别到。
具体的可参考: https://docs.cypress.io/guides/core-concepts/interacting-with-elements.html# 这个就当课后作业了。

以下给一个进阶版的脚本,大家可以运行一下看看效果:

describe('should display a correct error message when you enter wrong login information', function () {
 before(function () {
   cy.visit('https://www.amazon.com/')
 })

 var randomEmail = Math.random();
 var randomPassword = Math.random();

 it('displays a correct error message', function () {
   cy.get('#nav-your-amazon').click()
   cy.get('#ap_email').type(randomEmail + '@gmail.com')
   cy.get('#ap_password').type(randomPassword)
   cy.get('#signInSubmit').click()
   cy.get('#auth-error-message-box').should('be.visible')
 })
})

上面的代码涉及到了before函数的用法。cypress本身是支持before,beforeEach的这类测试套件的用法。

试用小结
Cypress感觉非常容易上手而且它使用了Mocha和Chai来写测试用例,已有Mocha和Chai使用经验的同学可以很容易转换,对于已经习惯使用Selenium+Python/Java的同学来说有没有必要一定要转过来需要进一步考虑一下,而且Selenium Grid对分布式的支持目前在Cypress上还没有看到很好的实现。

具体一点来说,喜欢Cypress的理由:

  • cypress不使用Selenium:我们已经尝试过的大多数端到端工具都在使用Selenium,这就是为什么他们有几乎相同的问题。
  • cypress很好地支持任何框架或网站:有数百个项目使用最新的React,Angular,Vue,Elm等框架。cypress在旧服务器渲染页面或应用程序上也同样有效。
  • cypress测试只用JavaScript编写:虽然您可以从任何其他语言编译成JavaScript,但最终测试代码在浏览器内部执行。没有语言或驱动程序绑定 ,只有JavaScript。
  • 没有依赖关系,你把测试放在package.json中就是这样。
  • 与我们已经实验过的Selenium的端到端工具相比,cypress的运行速度要快得多。集成在CI中的时候速度的优势可以尽情体现。
  • 你的脚本的每一步都有屏幕截图,如果有任何错误的通过或失败的测试,这可能非常有用,所见即所得,这一点和以前大家用LoadRunner等老牌的商用工具的体验感是一样的棒,非常有利于调试!
  • 当然cypress也有一个明确的cyntax,容易阅读,从学习成本的角度出发大部分人都会喜欢它!

不喜欢cypress的理由:

  • 该结构与其他Selenium端到端工具不同,之前习惯使用其它E2E测试工具的使用者来说,您可能需要花费更多时间来理解结构并找到创建脚本的最佳方法。
  • 社区:由于cypress相对较新,社区规模较小。 你很难找到问题的答案等。
  • 特征。 没有文件上传支持。 没有跨浏览器测试。 谁知道什么时候会涵盖这些东西,对于大项目这些功能至关重要。
  • 页面对象模型。 这已经被时间证明了。 赛普拉斯支持一种可能引起争议的不同方法。
  • 它仅适用于一个客户端(语言),即仅适用于JavaScript。 因此,要使用它,您必须知道JavaScript:但是这可能是JavaScript应用程序的一个优势,同时也将是cypress的一个缺点。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,475评论 4 372
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,744评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,101评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,732评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,141评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,049评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,188评论 2 320
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,965评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,716评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,867评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,341评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,663评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,376评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,200评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,990评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,179评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,979评论 2 279

推荐阅读更多精彩内容