当前位置: 首页 > news >正文

pytest+playwright落地实战大纲

前言

很久没有更新博客,是因为在梳理制作Playwright测试框架实战相关的课程内容。现在课程已经完结,开个帖子介绍下这门课程(硬广, o(〃^▽^〃)o)

课程放在CSDN学习频道, 欢迎关注~

PyTest+PlayWright自动化测试框架实战

请添加图片描述

为什么是Playwright?

请添加图片描述

Playwright,相比一些老牌的工具,它的诞生时间并不长,2020年才发布了第一个正式版本,当然在这之前已经有beta版推出。正因为工具比较新,所以也就有了后发优势。
而且Playwright出自微软,背靠大厂,各方面支持力度也很强,所以目前在web自动化测试工具中,上升的势头非常强劲,普遍被认为是能代替传统的web自动化霸主Selenium的新生代自动化测试工具。

当然,这个工具能受到欢迎,除了因为它是大厂出品,自然也离不开其自身的一些显著的明显优点。

  • Playwright的开发团队,是来自另一款工具puppeteer(Google基于chrome推出的web自动化工具)的核心成员。可以说Playwright是建立在puppeteer基础上的。而puppeteer,本身一度被认为是后selenium时代的web自动化三驾马车之一,所以Playwright可以说是站在巨人肩膀上,它不仅兼容了puppeteer的很多优点,还优化了puppeteer本身的一些不足,更加完善。

  • puppeteer有一个很大的约束就是它只支持chrome浏览器,而playwright则内建了对多种主流浏览器的支持,除了chrome、edge,也支持firefox、safari,能满足web自动化的主流浏览器覆盖

  • playwright支持不同的编程语言实现,除了像puppeteer原先支持的node.js之外,也可以支持java、python, 当然还有微软自己的.net。

  • Palywright还支持更多的一些扩充高级功能。

官网对playwright优势的介绍
  • 多浏览器、跨平台、多语言、以及对移动端web的支持。

  • 弹性框架,能主动规避很多导致UI自动化不够稳定的问题。包括自动等待、动态校验、过程跟踪这样一些特性

  • 更匹配现代浏览器的架构,是进程级的隔离,使用上线文的概念区分不同的测试场景,且互不干扰。还有像强化对Frame、shadow dom这样一些比较特殊的前端自动化处理

  • 更充分的隔离以及更快的执行速度,Playwright的上下文机制可以保证浏览器进程基本的隔离以及毫秒级的创建速度。执行速度的优势也得益于playwright基于websocket协议这种长连接、全双工、双向通信的通信协议。

  • 各种辅助工具,包括代码的自动化生成、录制,页面元素的定位辅助以及强大的信息跟踪工具。

工作原理

请添加图片描述

Playwright是基于Puppeteer之上的优化产物,它的实现原理可以说是puppeteer跟Selenium优点的综合。Playwright内建了一个基于Node.js实现的server模块,这个模块和基于各种不同语言的客户端程序之间,通过websocket协议来进行连接,通信,可以发挥websocket长连接、双向工作的优势。

然后再通过CDP协议对chromium内核的浏览器进行控制和自动化驱动,这里Playwright也支持firefox和webkit(其实是Playwright本身实现了针对这两款浏览器的CDP协议,这里叫CDP plus协议)。

还有个区别,Playwright其实是把浏览器版本内建在工具之中,这样就屏蔽了因浏览器版本不同导致的差异性。

测试框架在自动化测试工具体系中处于什么位置?

我们说到自动化,经常提到测试脚本、自动化工具、框架、平台,那么这些不同的概念到底有什么不一样,我们要介绍的框架,在整个自动化测试体系中,实际是处于什么位置呢?

可以用下面这个分层图来概括:

请添加图片描述

  • 脚本层面。 更多是可以通过一些测试脚本,来完成一些自动化测试任务或测试辅助工具。包括我们使用各种编程语言编写出来的测试代码,或者操作系统的一些shell、批处理脚本等,都属于脚本层面。脚本是自动化测试测试逻辑的直接体现。包括很多自动化测试录制回放工具,把手工操作,转换为测试脚本,完成的都是这个层面的工作。是自动化测试最基础的部分。

  • 工具层面。 这一层完成的是对脚本的驱动,脚本具体怎么驱动程序执行,怎么进行测试动作和结果的判断? 这些是自动化测试工具要完成的工作。不同类型的测试通常有不同的工具。我们经常说到的Selenium, Appium,Postman,QTP、Jmeter等等,包括Playwright,主要都可以理解为测试工具。可以做Web、移动应用,接口,性能等等不同类型的自动化测试。

  • 框架层面,它解决的是自动化测试的组织,把一整套自动化测试用例组织起来。包括用例的选择,执行过程的控制,结果的汇总呈现等。框架层面,最主要的是会支持不同的测试工具,可以对不同类型的自动化测试进行整合。比较常见的测试框架,比如Pytest、Junit、Robotframework等,都属于优秀的自动化测试框架。 像Junit、Pytest,开始是面向单元测试的测试框架,PyTest是借鉴Junit发展而来,但并不是说他们的应用范围就是单元测试,集成测试、系统测试也同样应用。就像自动化测试不属于某一个具体的测试阶段一样,我们也不要把某个测试工具或测试框架和测试的阶段混淆,这是两个不同维度的概念。

  • 平台层面。自动化测试平台是在更高层面来组织自动化测试。要实现测试任务的调度、测试环境的管理,测试数据、测试脚本等测试资产的管理和分配,包括和其他的研发流程实现互通,比如bug的管理、代码管理、文档管理、配置管理等与各种其他研发工具的互通和整合。

课程大纲

我的这门课程主要是结合Pytest和Playwright工具的系统介绍,学习如何搭建起一个可落地使用的自动化测试框架,包括和持续集成系统的集成。

请添加图片描述

感兴趣的小伙伴,可以关注哈,链接如下:

PyTest+PlayWright自动化测试框架实战

目前上新期,八折优惠哦~~

相关文章:

pytest+playwright落地实战大纲

前言 很久没有更新博客,是因为在梳理制作Playwright测试框架实战相关的课程内容。现在课程已经完结,开个帖子介绍下这门课程(硬广, o(〃^▽^〃)o) 课程放在CSDN学习频道, 欢迎关注~ PyTestPl…...

01-硬件入门学习/嵌入式教程-CH340C使用教程

前言 CH340C广泛应用于DIY项目和嵌入式开发中,用于USB数据转换和串口通信。本文将详细介绍CH340C的基本功能、引脚接线及使用方法。 CH340C简介 CH340C是一款USB转TTL电平转换器,可以将电脑的USB数据转换成串口数据,方便与单片机&#xff…...

小试牛刀调整Prompt,优化Token消耗

在上一篇文章 荒腔走板Mac电脑本地部署 LLM 中介绍过本地部署大模型之后,可以通过定制 prompt 来实现 domain 提取等各种各样的需求。 但是实际上,部署本地大模型 这种方式对于个人开发者来说实在是不太友好。一方面需要投入大量资金确保设备的算力足够支…...

snippets router pinia axios mock

文章目录 补充VS Code 代码片段注册自定义组件vue routerpinia删除vite创建项目时默认的文件axiosmock3.0.x版本的 viteMockServe 补充 为文章做补充:https://blog.csdn.net/yavlgloss/article/details/140063387 VS Code 代码片段 为当前项目创建 Snippets {&quo…...

Visual Studio2019调试DLL

1、编写好DLL代码之后,对DLL项目的属性进行设置,选择待注入的DLL,如下图所示 2、生成DLL文件 3、将DLL设置为启动项目之后,按F5启动调试。弹出选择注入的exe的界面之后,使用代码注入器注入步骤2中生成的dll&#xff0…...

深入解析:Docker 容器如何实现文件系统与资源的多维隔离?

目录 一、RootFs1. Docker 镜像与文件系统层2. RootFs 与容器隔离的意义 二、Linux Namespace1. 进程命名空间1.1 lsns 命令说明1.2 查看“祖先进程”命名空间1.3 查看当前用户进程命名空间 2. 容器进程命名空间2.1 查看容器进程命名空间列表2.2 容器进程命名空间的具体体现 三…...

vue项目中打包后的地址加载不出图片【五种解决方案】

在 Vue 项目中打包后,加载图片路径可能会出现问题,主要是因为打包后的路径与开发时的路径不同。为了确保图片可以正确加载,你可以考虑以下几种方法: 1. 使用 require 或 import 动态加载图片 如果你在 Vue 的模板或者脚本中引用…...

讯飞星火大模型将超越chatgpt?

讯飞星火大模型真的能超越ChatGPT吗? 在人工智能的世界里,新技术层出不穷,而科大讯飞最近发布的讯飞星火大模型3.0引发了不少讨论。有些人甚至大胆猜测:这个模型是否能够在某些方面超越如今广受欢迎的ChatGPT?今天,我们就来深入探讨一下这个话题,分析讯飞星火大模型3.0…...

3D Vision--计算点到平面的距离

写在前面 本文内容 计算点到平面的距离 平台/环境 python open3d 转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/121482246 目录 写在前面准备Open3D代码完 准备Open3D pip install open3d代码 import open3d as o3ddef compute_points2…...

《开源与合作:驱动鸿蒙Next系统中人工智能技术创新发展的双引擎》

在当今科技飞速发展的时代,鸿蒙Next系统作为一款具有创新性和前瞻性的操作系统,为人工智能技术的发展提供了广阔的舞台。而开源和合作则是推动鸿蒙Next系统中人工智能技术创新和发展的两大关键引擎。 开源:创新的源泉 代码共享与知识传播&am…...

Java 高级工程师面试高频题:JVM+Redis+ 并发 + 算法 + 框架

前言 在过 2 个月即将进入 3 月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的 java 开发朋友跳槽面试,无论一面还是二面,都开始考验一个 Java 程序员的技术功底…...

【机器学习】嘿马机器学习(科学计算库)第11篇:Pandas,学习目标【附代码文档】

本教程的知识点为:机器学习(常用科学计算库的使用)基础定位 机器学习概述 机器学习概述 1.5 机器学习算法分类 1 监督学习 机器学习概述 1.7 Azure机器学习模型搭建实验 Azure平台简介 Matplotlib 3.2 基础绘图功能 — 以折线图为例 1 完善原…...

WordPress Fancy Product Designer插件Sql注入漏洞复现(CVE-2024-51818)(附脚本)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...

StarRocks强大的实时数据分析

代码仓库:https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速开始:StarRocks | StarRocks StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化…...

Linux(Centos 7.6)命令详解:iconv

1.命令作用 将给定文件的编码从一种编码转换为另一种编码(Convert encoding of given files from one encoding to another) 2.命令语法 Usage: iconv [OPTION...] [FILE...] 3.参数详解 OPTION: 输入/输出格式规范: -f, --from-codeNAME,原始文本编码-t, --t…...

SpringBoot读取配置优先级顺序是什么?

Spring Boot外部化配置详解 目录 引言Spring Boot外部化配置概述配置加载优先级配置加载顺序详解实际案例总结 引言 Spring Boot因其“开箱即用”的特性,极大地简化了Java应用的开发和部署过程。它通过外部化配置机制,允许开发者根据不同的环境&#x…...

VScode连接远程Linux服务器环境配置

一、安装vscode 下载链接:Visual Studio Code - Code Editing. Redefined,点击下载安装即可 安装: 双击安装 选择安装位置,一直点击下一步即可 二、环境配置 1.中文汉化包 2.安装remote-ssh,用于远程连接 2.1安装 2…...

梯度下降法 (Gradient Descent) 算法详解及案例分析

梯度下降法 (Gradient Descent) 算法详解及案例分析 目录 梯度下降法 (Gradient Descent) 算法详解及案例分析1. 引言2. 梯度下降法 (Gradient Descent) 算法原理2.1 基本概念2.2 算法步骤2.3 梯度下降法的变种3. 梯度下降法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案…...

docker 部署 java 项目详解

在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署。今天我们以若依项目为例,总结下部署项目的整体流程。简单来说,第一步:安装项目所需的中间件;第二步&#xff1…...

npm install 报错:Command failed: git checkout 2.2.0-c

[TOC](npm install 报错:Command failed: git checkout 2.2.0-c) npm install 报错:Command failed: git checkout 2.2.0-c export NODE_HOME/usr/local/node-v14.14.0-linux-x64 npm config set registry https://registry.npmmirror.com 使用如上环…...

Vue基础(2)

19、组件之间传递数据 组件与组件之间不是完全独立的&#xff0c;而是有交集的&#xff0c;那就是组件与组 件之间是可以传递数据的 传递数据的解决方案就是 props ComponentA.vue <template><!-- 使用ComponentB组件&#xff0c;并传递title属性 --><h3>…...

(长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)

城市三维建模与分析 三维城市模型已经成为一种非常普遍的地理空间数据资源,成为城市的必需品,对城市能化管理至关重要。语义信息丰富的三维城市模型可以有效实现不同领域数据与IS相信息的高层次集成及互操作,从而在城市规划、环境模拟、应急响应和辅助决策等众多领域公挥作用、…...

war包 | Docker部署flowable-ui

文章目录 引言I war包部署flowable-ui下载war包配置Tomcat访问 flowable-uiII Docker启动flowable-ui并修改配置Docker启动flowable-ui修改配置访问Flowable UI界面。III 知识扩展加速源docker run -i -t -d 参数引言 Flowable 支持 BPMN 2.0 行业标准,同时提供了一些 Flowab…...

Java数据结构方面的面试试题以及答案解析

Java数据结构是在计算机中存储和组织数据的方式&#xff0c;用于高效地处理和管理数据。 以下是一些常见的Java数据结构&#xff1a; 数组&#xff08;Array&#xff09;&#xff1a;一种线性数据结构&#xff0c;允许通过索引快速访问元素。它存储固定大小的相同类型的元素集…...

Qt 5.14.2 学习记录 —— 십구 事件

文章目录 1、事件的概念2、处理事件3、鼠标事件1、鼠标单击和双击2、鼠标移动3、鼠标滚轮滚动 4、键盘事件5、定时器事件6、窗口移动和大小改变事件 1、事件的概念 用户进行操作时会产生事件&#xff0c;事件可以关联处理函数。Qt封装了操作系统的事件机制&#xff0c;然后进一…...

国产编辑器EverEdit - 命令窗口应用详解

1 命令窗口应用详解 1.1 应用场景 有时需要在EverEdit中执行一些命令行工具&#xff0c;甚至想把当前文档做为参数&#xff0c;传递给命令进行一些文本分析&#xff0c;比如&#xff1a;一些常用的文本处理工具&#xff0c;gawk.exe等。 1.2 使用方法 命令窗口的使用在官方手…...

iOS开发设计模式篇第二篇MVVM设计模式

目录 一、什么是MVVM 二、MVVM 的主要特点 三、MVVM 的架构图 四、MVVM 与其他模式的对比 五、如何在iOS中实现MVVM 1.Model 2.ViewModel 3.View (ViewController) 4.双向绑定 5.文中完整的代码地址 六、MVVM 的优缺点 1.优点 2.缺点 七、MVVM 的应用场景 八、结…...

【深度学习】3.损失函数的作用

损失函数的作用 假设把猫这张图片分成四个像素点&#xff0c;分别为&#xff1a;56、231、24、2&#xff08;实际应该是三维的&#xff0c;因为还有颜色通道的维度&#xff0c;这里简化成二维&#xff09;。 像素点拿到以后&#xff0c;进行三分类&#xff0c;粉红色为第一组W…...

深入MapReduce——计算模型设计

引入 通过引入篇&#xff0c;我们可以总结&#xff0c;MapReduce针对海量数据计算核心痛点的解法如下&#xff1a; 统一编程模型&#xff0c;降低用户使用门槛分而治之&#xff0c;利用了并行处理提高计算效率移动计算&#xff0c;减少硬件瓶颈的限制 优秀的设计&#xff0c…...

小黑日常积累:学习了CROSS APPLY字段,将sqlserver中字段通过分隔符拆分并统计

问题 字段中的元素是通过分隔符进行拼接的&#xff0c;我需要统计元素的个数&#xff0c;例如: 代码 样例表创建 -- 创建样例表 create table #Tmp_Table (ID int IDENTITY (1,1) not null,Strs nvarchar(50),primary key (ID) ); insert into #Tmp_Table (Strs) VALUES…...