自动化测试框架[各自动化测试框架大比拼]

news2024/12/28 3:36:30

目录

Cypress与Selenium/WebDriver

Language Bindings/Client

Selenium/WebDriver执行慢

Cypress与Selenium/WebDriver比较

Cypress与Karma比较

Cypress与Nightwatch比较

Cypress与Protractor比较

Cypress与TestCafe比较

Cypress和Puppeteer比较


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,详细比较如下表所示:

对比维度CypressSelenium/WebDriver
完备的框架YesNo,Only Library
ALL IN ONEYes No  
自带断言库Yes No  
自带MockYesNo  
自带测试运行器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
对比维度CypressKarma
完备的框架YesNo,Only Test Runner    
ALL IN ONEYesNo 
自带断言库YesNo 
自带MockYesNo 
自带测试运行器YesNo 

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
对比维度CypressNightwatch
完备的框架 YesYes
ALL IN ONEYesYes(安装和配置比较麻烦)    
底层框架自主研发,运行速度快基于WebDriver运行速度慢   
适用范围  UI、API、UnitTest UI  
脚本维护简单难维护  
回访测试执行情况YesNo  
多浏览器支持  YesYes

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
对比维度CypressProtractor
完备的框架Yes Yes 
ALL IN ONEYes 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
对比维度CypressTestCafe
完备的框架 YesYes
ALL IN ONEYesYes
底层框架 自主研发,运行速度快自主研发,通过Proxy Server工作 
测试用例组织便捷度基于Mocha,组织和编写简单测试用例写法异于常规fixture,学习成本高    
自带测试运行器 YesYes,But Only TestRunner   
回访测试执行情况YesYes
多浏览器支持YesYes
测试运行测试运行在浏览器中测试运行在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
对比维度CypressTestCafe
完备的框架 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支持

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

 留【自动化测试】即可

【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N5K3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=pDT8nLpWvOrLUSQ-i3IcDot7xS6NZxse&authKey=h0VjM1VXghu6FK9i7hd7QLWkQ9tHpvG5IGJTul3SmVQq1g%2F4ZezdQEc4tHcIH%2FqM&noverify=0&group_code=574737577

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈智能电容器的结构与功能在电网中的应用 安科瑞 许敏

摘要:近年来,随着我国电力工业的不断发展,大范围的高压输电网络逐渐形成,同时对电网无功功率的要求也日渐严格。电网无功功率不平衡将导致系统电压的巨大波动,严重时会导致用电设备的损坏。因此,研究无功补…

C++与QML 信号与槽交互

一、全局属性 在main.cpp中通过 QQmlApplicationEngine engine 获得全局对象 QQmlApplicationEngine engine; //全局对象 上下文对象 QQmlContext* context engine.rootContext(); //获取屏幕的大小 Screen *screen QGuiApplication::primaryScreen(); …

jquery基础知识整理

写在前面的话:由于公司做的政府网站,需要考虑到兼容ie。所以我们使用jquery解决方案。在一些展示类的、不是一个多网页的整体应用中。我们仍然可以使用jQuery进行开发。 以下是我看慕课网整理的jQuery知识。慕课网课程链接jQuery课程。 以下是我整理的知…

文档识别开发“零门槛”!合合信息智能文字识别技术助力柳州银行“降本增效”

现阶段,越来越多的金融机构将业务转到线上,推出了“零接触”金融服务以提升业务流程效率。在此过程中,智能文字识别技术对提升复杂版式文档录入效率起到了重要作用。 近期,在元脑生态框架下,合合信息将智能文字识别技…

数学建模算法(基于matlab和python)之 三次样条插值与多项式拟合(2/10)

实验目的及要求: 1、会在Matlab平台上进行样条插值; 2、会在Matlab平台上进行最小二乘拟合。 实验内容: 1、利用spline函数绘制【0,10】内步长为1的插值节点处的的样条曲线。 2、根据下列数据三转角方程法构造三次样条函数…

Linux命令大全(面试必备)

前两节有说Git命令,反馈还不错,看来大家对这些必备的命令还挺感兴趣哈,这节就罗列一些Linux必须掌握的命令。 干货满满哦,直接发车... 一、常用的基本命令 1、关机开机 关机 shutdown-h now 立刻关机shutdown-h 3 3分钟后关机…

Java八股文面试(黑马)

Redis篇 数据库的并发不高,请求到了一定的量就会击垮数据库,导致宕机。 大概率是客户端正好在写入数据,sentinel与当前master出现分区 而 重新选举了一个master Mysql篇

IOS 手机抓包 频繁 访问 gateway.icloud.com.cn:443

在抓包的时候,有时候苹果手机在重启后频繁出现gateway.icloud.com.cn:443请求 这种情况需要在手机上进行设置,适用于IOS16.0以上版本,其他版本不清楚,没有尝试过 进入 设置--点击AppleID ,进入个人信息页面---点击iCl…

开发工具-网络测试工具 POSTMAN 的脚本使用

开发工具-网络测试工具 POSTMAN 的脚本使用 postman 脚本应用基础设置变量、获取变量示例环境变量的使用测试 发送请求示例常用的变量、方法responseBody 获取响应体内容pm.response 获取响应信息pm.expect() JSON检查cheerio.load() 类似于 jquery 操作 html 元素 POSTMAN 是网…

做独立站要选择什么样的产品呢?这些要点要注意!

跨境圈都在说独立站能不能成功七分靠选品,三分靠运营,可见选品是决定独立站能不能成功的一大关键因素,只有先选定了产品,才能进行店铺装修、物流设置,以及后续的运营工作。 那么独立站的卖家应该如何去选品呢&#xf…

一文搞懂ASCII、Unicode与UTF-8

目录 一、前置知识二、ASCII三、从ASCII到Unicode四、Unicode五、UTF-8六、总结References 一、前置知识 一个字节有8-bit;一个十六进制数占4-bit,故一个字节可以表示为两个十六进制数(通常会加上 0x 前缀);十六进制通…

基于Python+OpenCV的视频字符化(深度学习+机器视觉)含全部工程源码

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境OpenCV环境 模块实现1. 视频读取及处理2. 色素块识别与替换3. 视频合成4. 操作系统上的实现 系统测试工程源代码下载其它资料下载 前言 本项目利用 OpenCV 提供的轻量、高效的 C类和 Python 接口,实…

数据平台流量回放最佳实践|精选

1.1 数据平台业务背景 数据平台利用大数据智能分析、数据可视化等技术,对公司内外部经过采集、建设、管理、分析的多源异构数据进行呈现和应用,实现了数据共享、日常报表自动生成、快速和智能分析,深度挖掘数据价值,满足企业各级…

Leetcode48 旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出…

ZYNQ——按键消抖实验

文章目录 原理简介软件仿真板上验证 原理简介 按键作为基本的人机输入接口,在很多电子设计中都是比较常见的,但是由于其机械特性,在按键按下或者松开的时候,按键的输入值是有抖动的。按键的抖动是其固有特性,因此无论…

打死也不要进外包,来看看我在腾讯外包的这2年......

我18年毕业于一个普通二本学校,是一个很不出名的小本科。大学期间专业知识也没有去认真的学习,所以毕业的时候就随便找了一份工作,在一个小公司做功能测试。 记得那时候薪资大概是6k左右,因为是在工厂,工作环境很差&a…

Gitlab 访问令牌更新 替换

引言 访问令牌到期后如何丝滑更换,或则如何更改账户的访问令牌实现权限变动呢?在我们使用访问令牌克隆项目之后,Windows凭据就帮我们记录下了密码。当然密码是不可见的,只能进行删除重新设置,通过凭据管理器进行更改。…

python基于预训练大模型权重实现文本向量化开发构建微博评论数据情感极向识别模型

因为最近的一些项目涉及到了大模型相关的技术开发研究,在我前面的博文中也已经有一些实践记录学习资料分享的文章了,今天是在做模型训练的时候突然想到一个有意思的想法,按照我之前做文本分类的方法,基本主流的技术路线都是先对文…

性能提升571%,32K超长上下文,推理速度提升42%,允许商用,国产开源大模型推出了二代 ChatGLM2-6B...

6月份是火热的夏天,各种火热的 AI 产品也在密集的更新,天越热,大家是干得热火朝天,卷出了新高度。 前有现在大火的 ChatGPT,ChatGPT 更新:大杀器!函数调用示范,ChatGPT 3.5/4 双双升…

Java Web JDBC(2)23.6.26

3.6 PreparedStatement PreparedStatement作用: 预编译SQL语句并执行:预防SQL注入问题 3.6.1 代码模拟SQL注入问题 Test public void testLogin() throws Exception {//2. 获取连接:如果连接的是本机mysql并且端口是默认的 3306 可以简化书…