Cypress与Selenium/WebDriver

Selenium/WebDriver架构

它基于Client/Server架构设计,其架构图如下所示

Language Bindings/Client

也叫做ClientLibrary,它是Selenium框架的一系列jar文件,可以使用不同的编程语言编写,也正因为它的存在,才使得各个语言编写的测试代码能够被正确解析

浏览器驱动WebDriver

WebDriver用于管理和完全控制浏览器,根据不同的浏览器区分不同的Driver

HTTP传输的JSON Wire协议

JSON(JavaScript Object Notation)是一种在Web上的服务器端和客户端之间传输数据的开放标准
JSON Wire协议是一个抽象规范,定义了用户在自动化脚本里操作该如何映射到Selenium或HTTP请求和响应中,通过JSON Wire协议可以在HTTP服务器之间传输信息,Language Bindings和WebDriver就是通过HTTP协议传输JSON数据的

多浏览器

Selenium/WebDriver几乎支持所有主流浏览器,通过浏览器驱动实现对浏览器的控制

Selenium代码执行过程

from selenium import webdriver
driver = webdriver.Chrome()
dirver.get("http://www.baidu.com")

那么执行这段代码会发生哪些事情?

  • Selenium的Language Bindings首先与Selenium API(基于浏览器原生API封装的更加面向对象的Selenium WebDriver API,它可以直接操作浏览器页面里的元素)进行通信
  • Selenium API通过JSON Wire协议把代码交由Language Bindings转换成一个JSON Payloads发送到浏览器驱动程序
  • 浏览器驱动程序有一个内置的HTTP Server来接收HTTP请求,当这个HTTP Server获取到了发送来的JSON Payloads后,就会被浏览器驱动转换成HTTP请求,然后再通过HTTP协议发送给真正的浏览器执行
  • Selenium脚本中的命令在浏览器上执行后,再将执行结果通过HTTP请求返回给浏览器驱动
  • 浏览器驱动再通过JSON Wire协议把结果返回给IDE,从而我们能够看到执行结果

Selenium/WebDriver执行慢

从代码的执行过程不难看出,代码进行多次转换并通过网络进行传输,即便代码在本地运行,WebDriver和浏览器的通信也要通过网络传输,在这种情况下,所有的请求会发送给本地主机,其后是环回接口(环回接口用来查错和运行本机内部的网络服务),网络通信会从OSI模型的第三层即网络层开始,遗传经过传输层、会话层、表示层到达应用层,只有物理层和数据链路层被略过,对于浏览器来说一个请求从本地主机到环回接口返回需要花费的时间决定了代码执行的效率,这就是Selenium/WebDriver执行慢根本原因

Cypress与Selenium/WebDriver比较

驱动浏览器方式

与Selenium/WebDriver通过运行在浏览器以外的命令进行Remote Call方式驱动浏览器的方式不同,Cypress命令跟被测应用程序运行在同一个浏览器实例当中

测试范围

与Selenium/WebDriver只能测试UI层不同,Cypress可以测试UI层/接口层/单元测试,对于测试金字塔而言,越往上投入越大收益越低

完备的测试框架与测试Library

Cypress具有完备的测试框架,而Selenium/WebDriver仅是一个Library,详细比较如下表所示:

对比维度 Cypress Selenium/WebDriver
完备的框架 Yes No,Only Library
ALL IN ONE Yes No
自带断言库 Yes No
自带Mock Yes No
自带测试运行器 Yes No
运行速度 相对慢
元素查找时等待 自动等待 不支持
Headless模式 支持 支持
运行时截图 支持 支持
运行时录屏 支持 不支持
回放测试执行情况 支持 不支持
并发测试 支持(收费) 支持
远程执行测试 不支持 Selenium Grid支持
脚本编写语言 JavaScript 多种语言支持
多浏览器支持 支持 支持
社区 内容完善 一般般

Cypress是一个完备的测试框架,自带了测试运行器(Test Runner),单元测试框架(Mocha),断言库(Chai-jQuery),唯一需要做的就是编写测试代码,ALL IN ONE,从对比结果中发现Cypress不支持并发运行,但是它提供了跨虚拟机并行运行测试脚本并手机测试结果的能力;脚本语言目前只支持JavaScript或许这也是使用范围不佳的原因之一,而在Cypress4.0之前仅支持Chromium内核的浏览器,比如Chrome,Electron等浏览器,从4.0开始支持了Firefox和Microsoft Edge

Cypress与Karma比较

// 安装Karma
npm install karma --save-dev
// 安装插件
npm install karma-jasmine karma-chrome-launcher jasmine-core --save-dev
// 运行Karma
./node_modules/karma/bin/karma start
对比维度 Cypress Karma
完备的框架 Yes No,Only Test Runner
ALL IN ONE Yes No
自带断言库 Yes No
自带Mock Yes No
自带测试运行器 Yes Yes

Cypress与Nightwatch比较

// 安装Node.js
// 安装Nightwatch
npm install nightwatch --save-dev
// 安装WebDriver
npm install geckodriver --save-dev
npm install chromedriver --save-dev
npm install safaridriver --save-dev
safaridriver --enable
npm install selenium-standalone --dave-dev
// 配置nightwatch.json,nightwatch.conf.js等参考
//https://nightwatchjs.org/gettingstarted//configuration
对比维度 Cypress Nightwatch
完备的框架 Yes Yes
ALL IN ONE Yes Yes(安装和配置比较麻烦)
底层框架 自主研发,运行速度快 基于WebDriver运行速度慢
适用范围 UI、API、UnitTest UI
脚本维护 简单 难维护
回访测试执行情况 Yes No
多浏览器支持 Yes Yes

Cypress与Protractor比较

// 全局安装Protractor
npm install -g protractor
// 这将安装两个命令行工具protractor和webdriver-manager
// 验证安装
protractor --version
// 下载必要的binaries
webdriver-manager update
// 启动Selenium Server
webdriver-manager start
// 编写好测试用例,例如文件名为test.js,然后将其配置到配置文件conf.js中
exports.config={seleniumAddress:'http://localhost:4444/wd/hub',specs:['test.js']
};
// 运行测试
protractor conf.js
对比维度 Cypress Protractor
完备的框架 Yes Yes
ALL IN ONE Yes Yes
底层框架 自主研发,运行速度快 基于WebDriverJS运行速度慢
单元测试框架 底层使用Mocha,不可替换 默认使用Jasmine,允许替换
适用范围 多种语言开发的程序均可进行测试 主要用于Angular的程序
回访测试执行情况 Yes No
多浏览器支持 Yes Yes
// 以下代码打开helloqa.com并验证title
// 网站不是基于Angular开发,因此代码需要做如下修改
// browser.waitForAngularEnabled(false);
describe('Protractor Demo App', function(){it('should have a title', function(){browser.waitForAngularEnabled(false);browser.get('http://helloqa.com');expect(browser.getTitle()).to.have.string('davieyang');;});
});

Cypress与TestCafe比较

// 确定本机安装了Node.js和npm后
npm install testcafe --save-dev
npm install -g testcafe
// 运行测试
testcafe chrome{path-to-testfile/}testfile
对比维度 Cypress TestCafe
完备的框架 Yes Yes
ALL IN ONE Yes Yes
底层框架 自主研发,运行速度快 自主研发,通过Proxy Server工作
测试用例组织便捷度 基于Mocha,组织和编写简单 测试用例写法异于常规fixture,学习成本高
自带测试运行器 Yes Yes,But Only TestRunner
回访测试执行情况 Yes No
多浏览器支持 Yes Yes
测试运行 测试运行在浏览器中 测试运行在node.js中,便于设置和清除数据库fixtures

Cypress和Puppeteer比较

npm i puppeteer
yarn add puppeteer
// 编写测试,访问helloqa站点并截图
const puppeteer=require('puppeteer');(async()=>{const browser = await puppeteer.launch();const page = await browser.newPage();await page.goto('https://www.helloqa.com');await page.screenshot({'path:testtExample.png'});await browser.close();})();
// 运行测试
node testExample.js
对比维度 Cypress TestCafe
完备的框架 Yes Yes
是有有IDE Yes No
适用范围 e2e的完美解决方案 主要用于爬虫和开展快速测试
自带断言库 Yes No
回访测试执行情况 Yes No
多浏览器支持 Yes Yes

Cypress的局限性

  • 不建议使用Cypress用于网站爬虫或性能测试
  • Cypress不支持多标签测试
  • Cypress不支持同时打开两个及以上的浏览器
  • 每个Cypress测试用例应遵守同源策略即协议相同,域名相同,端口相同,否则自动报错
  • 目前只支持Chrome、Firefox、Microsoft Edge和Electron
  • 不支持移动端
  • 对于iframe的支持有限
  • 不能在window.fetch上使用cy.route()
  • 没有影子DOM支持

Cyrepss有免费版本和收费版本,针对于需要进一步提高测试效率更有效的组织分析测试结果,收费版本还有基于持续集成的Dashboard

自动化测试框架[各自动化测试框架大比拼]相关推荐

  1. 自动化测试基础篇--Selenium框架设计(POM)

    一.自动化测试框架 感谢木棉花的漂泊分享,内容转自链接:http://www.cnblogs.com/fengyiru6369/p/8053035.html 1.什么是自动化测试框架 简单来说,自动化 ...

  2. selenium自动化测试框架_自动化测试框架

    为了适应快速发展的行业生态系统的步伐,必须加快应用程序交付时间,而且必须不能以质量为代价.在更短的时间内达到质量的目的至关重要,因此质量保障倍受关注.为了满足对卓越质量和更快迭代的要求,越来越多的企业 ...

  3. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)...

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  4. python测试框架untest_python自动化测试框架unittest

    对于刚学习python自动化测试的小伙伴来说,unittest是一个非常适合的框架: 通过unittest,可以管理测试用例的执行,自动生成简单的自动化测试报告: 首先我们尝试编写编写一个最简单的un ...

  5. web前端自动化测试(基于QT4W框架)

    目录 web前端自动化测试(基于QT4W框架) 一.背景 1.1前端测试种类 二.技术方案 三.核心代码 3.1控件封装 3.2操作控件方法实现 3.3测试用例case 3.4断言方法 web前端自动 ...

  6. 【Python自动化测试26】接口自动化测试实战六_pytest框架+allure讲解

    文章目录 一.前言 二.pytest讲解 2.1 什么是pytest? 2.2 为什么使用pytest? 2.3 使用pytest 2.4 pytest的运行方式 2.5 pytest高级特性 2.5 ...

  7. 不会做UI自动化测试?一起设计框架再实践吧

    目的 相信做过测试的同学都听说过自动化测试,而UI自动化无论何时对测试来说都是比较吸引人的存在. 相较于接口自动化来说它可以最大程度的模拟真实用户的日常操作与特定业务场景的模拟,那么存在即合理,自动化 ...

  8. 史上最全 Appium 自动化测试从入门到框架实战精华学习笔记(二)

    本系列文章汇总了从 Appium 自动化测试从基础到框架高级实战中,所涉及到的方方面面的知识点精华内容(如下所示),希望对大家快速总结和复习有所帮助. Appium 自动化测试从基础到框架实战 App ...

  9. 接口自动化测试实战之pytest框架+allure讲解

    一.前言 本文章主要会讲解Python中pytest框架的讲解,介绍什么是pytest.为何要测试.为何使用以及参考和扩展等等,话不多说,咱们直接进入主题哟. 二.pytest讲解 2.1 什么是py ...

  10. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)...

    星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...

最新文章

  1. 配置Struts 2应用程序的安全功能(转)
  2. NOIP2018复赛 游记
  3. 逾期了,如何消除不良记录?
  4. Python多线程豆瓣影评API接口爬虫
  5. 面试官最常问的问题总结(一)
  6. windows server 2012安装
  7. 安卓应用安全指南 翻译完成
  8. java 多线程——一个定时调度的例子
  9. 科技+铁腕齐下 济宁市智慧环保建设成效显著
  10. 资产管理软件 GLPI的安装(转)
  11. linux 开源中文字体,有哪些免费的中文字体可以下载?
  12. Anylogic-----------集合Collection
  13. 解决linux(centos7)重新安装mysql systemctl start mysqld.service时报错
  14. 乔布斯斯坦福大学演讲
  15. linux 用户shell 无效,浅谈Linux环境下,为什么设置用户ID位对shell脚本无效
  16. SVAC1.0逆扫描反变换反量化分析
  17. 001-查看ts版本、安装、卸载
  18. [iOS UI设计笔记整理汇总]
  19. 最新Visual Studio的安装与使用 - 工作负荷选择 c语言 | 手把手基础教学
  20. 联表查询求和的一些问题

热门文章

  1. 省市区镇(可以选四级)联动点击自动展开下一级
  2. WIN10 系统无法启动YY开播
  3. 网易云音乐API使用教程与遇到的问题
  4. 软件体系结构的基本概念与作用
  5. visual Studio2008试用版过期升级正式版的破解方法
  6. 关于Integer和int
  7. windows10使用Debug
  8. layui tpl中的if(){}else{}
  9. T-SNE可视化高维数据,亮瞎审稿人
  10. Ridge Regression and Kernel Ridge Regression