playwright - 剧作家, 端对端测试


outside_default.png

本文基于 playwright v1.34.3, node v18.16.0

注意:playwright 版本随 node lts 版本更新而更新,所以请确保 node 版本与 playwright 版本匹配。

写在前面

前端开发阶段,少不了测试,一般包含两类测试:单元测试、端对端测试(e2e)。

对于组件和函数,单元测试库如jestmocha, 就可以轻松胜任。但如果是涉及到页面多模块的复杂交互场景,e2e就必不可少了。e2e能做到:

  1. 模拟用户在浏览器中的操作

  2. 模拟真实浏览器运行环境

  3. 操控运行时环境,获取运行时的数据

  4. 截屏比对各个节点效果

e2e,开源领域有许多工具可用,出名的有google的puppeteer。当然puppeteer只是提供了与chrome浏览器交互的能力,要做到e2e,你还需使用如jest的测试库。

这里要介绍一下另一个e2e测试工具,本文的主角,专为e2e而生的playwright("剧作家")。

playwright 是什么

「GitHub Copilot回答」: “Playwright 是一个 Node.js 库,用于自动化浏览器、单页应用程序和跨浏览器测试。它支持 Chromium、Firefox 和 WebKit,可以在这些浏览器中执行自动化测试、爬虫、性能测试等任务。Playwright 还提供了一些方便的 API,如截图、录制视频、模拟用户输入等。同时,Playwright 还支持多种语言,如 JavaScript、TypeScript、Python、Java 和 C# 等。”

为什么选择 playwright

比起“傀儡师”(puppeteer)拥有的操作浏览器的能力,剧作家(playwright)拥有的支持跨操作系统多浏览器多开发语言的创作能力,显然更加强大。(国内下载安装友好!!)

首先,playwright 出自名门,是微软研发团队所开发的一款Web自动化测试框架,发布于2020年初。强大的开源社区为 playwright 的持续发展,提供了稳定的保障。紧跟浏览器版本,及时发布适配版本。

其次,核心成员有来自puppeteer团队的,和前辈puppeteer是一脉相承。所以puppeteer的项目,基本可以做到无缝对接。

最后,最重要的能力,也醒目地写在 github 的 README.md 里面, 这里简要概括一下:

  1. 稳定性高,不易出错,支持“Auto-wait”、“Web-first assertions”、“Tracing”;

  2. 无需取舍,不受限制,“Multiple everything”、“Trusted events”、“Test frames, pierce Shadow DOM”;

  3. 隔离性强,执行速度快,“Browser contexts”、“Log in once”;

  4. 工具强大,拥有“Codegen”、“Playwright inspector”、“Trace Viewer”;

直接安装使用

puppeteer一样,除了需要安装 playwright,还需要下载 playwright 的浏览器驱动,如 chromiumfirefoxwebkit

安装和初始化

安装之前,为了加速下载,可以在全局变量或者 .npmrc 中设置下载源 PLAYWRIGHT_DOWNLOAD_HOST,如:

PLAYWRIGHT_DOWNLOAD_HOST="https://cdn.npmmirror.com/binaries/playwright"

推荐使用 npm init playwright 来安装 playwright

npm init playwright@latest

此时会有个问答提示,如下:

Getting started with writing end-to-end tests with Playwright:
Initializing project in '.'
✔ Do you want to use TypeScript or JavaScript? · JavaScript
✔ Where to put your end-to-end tests? · tests
✔ Add a GitHub Actions workflow? (y/N) · false
✔ Install Playwright browsers (can be done manually via 'npx playwright install')? (Y/n) · false

其中:

  1. 可以选择初始化项目的语言类型,TypeScript 或者 JavaScript

  2. 可以选择测试文件的存放目录,默认是 tests

  3. 可以选择是否添加 GitHub Actions 的工作流,用于自动化测试;

  4. 可以选择是否自动安装浏览器驱动,如果选择 false,则需要手动安装。

手动安装浏览器驱动

npx playwright install

另外如果只想下载  Chromium  可以使用--with-deps, 如:

npx playwright install --with-deps chromium

下载过程如下:

Downloading Chromium 114.0.5735.35 (playwright build v1064) from https://cdn.npmmirror.com/binaries/playwright/builds/chromium/1064/chromium-mac-arm64.zip
122.8 Mb [====================] 100% 0.0s
Chromium 114.0.5735.35 (playwright build v1064) downloaded to /Users/liuyapeng/Library/Caches/ms-playwright/chromium-1064
Downloading FFMPEG playwright build v1009 from https://cdn.npmmirror.com/binaries/playwright/builds/ffmpeg/1009/ffmpeg-mac-arm64.zip
1 Mb [====================] 100% 0.0s
FFMPEG playwright build v1009 downloaded to /Users/liuyapeng/Library/Caches/ms-playwright/ffmpeg-1009

为了避免重复下载和方便管理浏览器,playwright 会将浏览器下载到默认缓存文件夹。

  • Windows: %USERPROFILE%\AppData\Local\ms-playwright

  • MacOS: ~/Library/Caches/ms-playwright

  • Linux: ~/.cache/ms-playwright

# 以macOS为例
ls ~/Library/Caches/ms-playwright
chromium-1064 ffmpeg-1009

运行

在上述初始化项目的过程中,已经生成了一个测试文件 tests/example.spec.js,内容如下:

const { test, expect } = require('@playwright/test');test('has title', async ({ page }) => {await page.goto('https://playwright.dev/');// Expect a title "to contain" a substring.await expect(page).toHaveTitle(/Playwright/);
});
// ...

还有一个tests-examples文件夹,里面有更多的测试用例,可以参考。

同时,项目路径下还生成了一个 playwright.config.js 配置文件,内容如下:

const { defineConfig, devices } = require('@playwright/test');
module.exports = defineConfig({testDir: './tests',/* Run tests in files in parallel */fullyParallel: true,/* Fail the build on CI if you accidentally left test.only in the source code. */forbidOnly: !!process.env.CI,/* Retry on CI only */retries: process.env.CI ? 2 : 0,/* Opt out of parallel tests on CI. */workers: process.env.CI ? 1 : undefined,/* Reporter to use. See https://playwright.dev/docs/test-reporters */reporter: 'html',projects: [{name: 'chromium',use: { ...devices['Desktop Chrome'] },},{name: 'firefox',use: { ...devices['Desktop Firefox'] },},{name: 'webkit',use: { ...devices['Desktop Safari'] },},],// ...
});

这里可以配置测试文件的目录、测试报告的格式、测试的浏览器等。

最后,运行测试:

npx playwright test

playwright test 读取playwright.config.js的配置,你也可以在这条命令后添加参数设置,如通过 --project 来指定运行的浏览器,如:

npx playwright test --project chromium

测试完成后,可以查看测试报告,如:

npx playwright show-report

a1e977ba78a433af4ce3a47c692ed043.png

生成测试代码

对于开发者来说,写测试代码不是难事,难的是没时间写。高质量的代码,测试代码的数量往往是比业务代码还多。所以,我们需要一些工具来帮助我们生成测试代码。

可以通过 cli 命令来启动一个浏览器,然后手动操作,最后生成测试代码:

npx playwright codegen

0b6b791fb6bd37f616a237b8ddabb25e.gif

推荐使用 vscode 插件来生成测试代码,后面会介绍。

通过vscode插件

playwright 提供了一个 vscode 插件,可以方便地生成测试代码、运行测试、查看测试报告等。

安装插件

de5e3d65b23ba834fa039abb4b7b5346.png

使用插件

直接点击主侧边栏 “测试”,可以很方便地运行测试:

0abdf8701f361b7634ed6bcc1259f59b.png

点击 playwright 插件的 “录制新用例”,会在tests中自动生成一个新文件, 其他流程同npx playwright codegen操作。

使用ui可视化测试用例

playwright 提供了一个很强大的功能,就是通过使用--ui,启动一个页面,可以很方便地运行测试用例、查看测试结果、逐帧对比测试过程等。这对于设计走查也是非常有用的。

如果你使用过e2e工具 cypress,两者的功能类似,但是playwright的功能更强大。

npx playwright test --ui

53652a194427c530399a9d986996768d.gif

其它用途

  • 截图

注:使用storybook开发组件库时,可以使用playwright官方提供的 storywright 来自动生成 story 截图,方便查看组件的样式。

const { chromium } = require('playwright');(async () => {const browser = await chromium.launch();const page = await browser.newPage();await page.goto('https://www.baidu.com');await page.screenshot({ path: `baidu.png` });await browser.close();})();
  • 爬虫

const { chromium } = require('playwright');(async () => {const browser = await chromium.launch();const page = await browser.newPage();await page.goto('https://www.baidu.com');const title = await page.title();console.log(title);await browser.close();})();
  • 性能测试

const { chromium } = require('playwright');(async () => {const browser = await chromium.launch();const page = await browser.newPage();await page.goto('https://www.baidu.com');const performanceTiming = JSON.parse(await page.evaluate(() => JSON.stringify(window.performance.timing)));console.log(performanceTiming);await browser.close();})();

总结

本文是对 playwright 的一个简单的入门介绍,主要介绍了它强大的端对端测试能力。对于端对端测试来说,playwright 为我们写测试用例提供了很多便利,比如自动等待、自动截图、自动重试、自动断言等等,包括很多可视化的工具,比如生成测试代码、生成测试报告、生成测试录像等等。可以说,playwright 能显著提高我们的测试开发效率,让我们更专注于测试用例的编写,是一个非常值得推荐的工具。当然,playwright 的能力远不止于此,需要你自己去官网文档中去探索。

参考链接

  • https://playwright.dev/

  • https://jecyu.github.io/Fe-Auto-Testing/concepts/

- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

b8eab23426fc856003b997e84fcee0de.png

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

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

相关文章

如何搭建苹果虚拟服务器降级,ios14怎么降级13.6 苹果iOS14降级超详细教程

iOS14相信很多朋友都体验过了,最近不少的小伙伴都升级到iOS14,但是对这个版本并不满意,那么iOS14怎么降级13.6呢?下面就来为大家分享一下苹果iOS14降级13.6的教程。 1、通过 iTunes 降级系统(注意事项:降级只能降级到最新的iOS 1…

苹果手机无法验证应用怎么办_苹果关闭iOS 14.0.1验证,用户将无法降级_

2020年10月28日 10:01 作者:陈沐梁 编辑:陈沐梁 文章出处:泡泡网原创 10月28日消息 在上周发布 iOS 14.1正式版之后,苹果今天停止了对 iOS 14.0.1的验证,这意味着用户无法再降级到该版本。 苹果通常会在新版本发布后停…

苹果开放降级通道_苹果出手,关闭降级系统iOS13验证,iOS14再也回不去了!

自苹果发布最新版iOS 14系统后,有人已经抢先尝鲜升级了,有人还在观望中,这一次iOS 14系统升级,主要带来的变化有新增了一系列小功能,比如主屏小组件、APP资源库、给照片命名等,而据外媒报道,iOS…

苹果6严重卡顿_苹果手机iOS系统: 如果开放系统降级通道会怎么样?

苹果手机的iOS系统有一个最大的特点就是只能升级不能降级,每次系统升级之后,大约只有两周的时间让用户反悔,通过刷机的方式降级,超过了这个时间就永远不能降级了。 但是苹果每次推出新版本系统又总是出岔子,尤其是这次…

苹果手机几月份最便宜_苹果手机越来越便宜了么?目前看来确实是这样的!

原标题:苹果手机越来越便宜了么?目前看来确实是这样的! 苹果手机越来越便宜了么?目前看来确实是这样的,iPhone11系列已经从当初的5000元跌到了现如今的4000出头,在某多多甚至只需要3979元即可入手&#xff…

苹果手机编辑word_苹果手机更新后卡顿,关闭这两个开关立马恢复,设置之后差点泪崩...

现在很多使用苹果手机的小伙伴,升级系统之后手机就会出现很多穿线问题,不仅没有达到预计的流畅度,升级之后反而出现各种问题,下面给出两种恢复原版流畅度的方法,大家一起来看一下,有用的话记得给小编点个赞…

Android手机直播系统开发介绍

近两年直播热的兴起也带动了直播开发行业的崛起,每个人都想要去吃直播开发这块蛋糕。但这块蛋糕也不是这么容易吃到的,在激烈的市场竞争下,有几个大的直播平台始终占据着市场中较大的份额,也有一些小的公司承受不住冲击倒下&#…

鸿蒙系统上市对苹果的影响,鸿蒙系统华为手机今年上市?假如能够比肩iOS,苹果还有何优势?...

最近一段时间关于华为鸿蒙系统的消息大家想必是已经看了不少了,这一波波峰回路转的剧情也确实很是引人注目,先是谷歌响应“实体名单”,逼的华为不得不抛出“备胎”计划,鸿蒙系统也由此进入大众视野,而后谷歌见势不妙又…

苹果手机几月份最便宜_苹果手机越来越便宜,安卓手机越来越贵,果真是这样吗?...

[PConline 杂谈]在北京时间2020年4月15日的晚间,苹果悄然地在其官网更新了一款与旧设备同名的产品iPhone SE。与当年的iPhone SE复刻iPhone 5S的路线相同,新款iPhone SE也走了“复古怀旧”的路线,沿用了iPhone 8系列的外观。 iPhone降价&…

如何降低计算机版本,苹果系统怎么降级到好用的老版本

怎样降级成ios11?很多人升成ios12以后发觉耗电量、卡顿等难题,又后悔莫及升級了,那麼人们能否降回到ios11呢?回答那时候是能够 的啦,下边为大伙儿详细介绍iPhone系统软件降级实例教程。 准备工作 1、准备好一台Windows系统电脑或iPhoneMacOS系统电脑; 2、在电脑上下载和安…

苹果手机系统更新在哪里显示无服务器,苹果手机系统升级出现故障问题,怎么看问题出在哪里...

大家的苹果手机有时候升级或者刷机的时候都会出现各种报错故障,当手机出现各种故障错误是不是无从下手,今天教大家怎么样解决苹果故障问题。 验证CPU-验证内存-验证硬盘-进度条开始走(写硬盘)-走到 50%表示硬盘已经写完 验证基带-写基带-进度条走到80%表…

苹果6系统怎么更新不了_苹果手机系统怎么降级

很多朋友把自己的iPhone升级到新版本系统之后,可能会遇到系统升级之后变卡、运行不流畅等这些情况,想把iPhone降回老的版本系统恢复起来。那么苹果手机系统怎么降级呢?那今天我就跟大家分享一下iPhone降回老版本系统方法,下面就一起来看看吧。 苹果手机系统怎么降级 1、首先…

Go开发学习 | 如何使用Gomail.v2模块包发送邮箱验证码消息及附件学习记录

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! “ 花开堪折直须折,莫待无花空折枝。 ” 作者主页:[ https://www.weiyigeek.top ] 博客&…

CorelDRAW Graphics Suite2023新功能详解下载教程

CorelDRAW2023版本有效快速创作,充分体现设计者创意,一款全面图形设计软件。应用广告宣传、艺术作品、纺织业等各个行业。 CorelDRAW Graphics Suite涵盖了全部CorelDRAW图形处理组件,是一款智能高效的平面设计软件,广泛应用于排版…

CorelDRAW 2023版本更新内容及安装详细教程

这里是CorelDRAW 2023版本更新内容及安装详细教程: CorelDRAW 2023是最新更新版本,在界面和功能上做了较大提升与优化: 1. 简洁界面:采用全新设计界面,简约而不简单。菜单和工具栏进行了整合与重组,更加直观。拥有自动标记和提示,易于上手使用。 2. 全新工作空间:提供“轻量…

coreldraw2023安装包下载及新功能介绍

对于广告标识业来说 coreldraw这个软件,对我们来说绝对不陌生,我从2008年开始接触到广告制作,到现在已经13多年了,从一开始的coreldraw 9红色的热气球开始。就被这个强大的软件所吸引,他有强大的排榜功能已经对位图的处…

CorelDRAW2022新版本序列号 cdrx8安装向导教程

如果在工作生活中需要设计图形、照片、网站等,可以使用cdr设计软件,那么如何下载呢,下面小编就跟小伙伴们一起分享下cdr下载中文版免费方法的教程。希望对小伙伴们有所帮助。 cdr下载中文版免费教程方法 如果在工作生活中需要设计图形、照…

CorelDRAW2022全新试用版功能详细讲解

CorelDRAW Graphics Suite2022是配备齐全的专业设计工具包,可以非常高的效率提供令人惊艳的矢量插图、布局、照片编辑和排版项目。在 Windows 和 Mac(包括Windows 11、macOS Monterey)上尽享对最新技术的原生支持,和 Apple M1 芯片…

基于Android应用开发实现UWB(超宽带)通信

什么是超宽带UWB 超宽带通信是一种无线电技术,专注于设备之间的精确测距(测量位置的精度为 10 厘米)。这种无线电技术可以使用低能量密度进行短距离测量,并在大部分无线电频谱上执行高带宽信号传输。UWB 的带宽大于 500 MHz(或超过 20% 的小数带宽)。 从 Android 13 开…

第二章 部署DNS服务

♥️作者介绍:奇妙的大歪 ♥️个人名言:但行前路,不负韶华! ♥️个人简介:云计算网络运维专业人员 目录 一.DNS是什么? 1.DNS的工作原理 二.DNS内容 1.本章单词 2.域名空间结构: 3.顶级域…