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://www.rhkb.cn/news/54732.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序实现评分,包含满星、半星,模仿豆瓣电影评分显示

微信小程序实现评分功能 前言 本人在用原生小程序开发时&#xff0c;需要用到评分功能&#xff0c;于是自己动手撸了一个评分显示组件。包含满星、半星功能。废话少说&#xff0c;上才艺: 1、先任意创建组件&#xff0c;index.wxml代码如下&#xff1a; <view classstarb…

出售计算机广告英文作文,17年6月大学英语四级作文参考范文—二手电脑广告

原标题&#xff1a;17年6月大学英语四级作文参考范文—二手电脑广告 2017年6月大学英语四级考试已经结束&#xff0c;今年大学英语四级考试真题中有一套题为校园网上发布出售二手电脑的广告&#xff0c;文都教育英语老师为大家提供参考范文如下&#xff1a; 【题目】 Direction…

李小铭计算机专业应聘书作文,2018高考英语满分作文范文

范文二 Dear Terry: I am glad that you turned to me for advice in regard to visiting a Chinese friend, and the following are some local customs which I suggest you should be familiar with. First of all, if the Chinese friend of yours who you are going to pa…

成人高考 计算机英语作文,2018年成人高考英语作文范文六篇

【导语】成人高考是成人高等学校招生统一考试的简称&#xff0c;属国民教育系列&#xff0c;国家承认学历&#xff0c;参加全国招生统一考试&#xff0c;各省、自治区、直辖市统一组织录取。无忧考网为了帮助同学们更好的备考&#xff0c;特别整理了成人高考英语作文范文&#…

60个AIGC专业术语手册;5种大模型微调方法总结;大模型创业潮成败点评;AIGC通用大模型产品测评报告 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; ChatGLM 金融大模型挑战赛&#xff0c;冠军送12B模型授权30W算力 GLM大模型联合安硕信息、阿里云、魔搭社区、北京交通大学&#xff0…

文心一言——何妨吟啸且徐行

百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动&#xff0c;回答问题&#xff0c;协助创作&#xff0c;高效便捷地帮助人们获取信息、知识和灵感。 文心一言可以做什么&#xff1a; 与人对话互动&#xff0c;回答问题&#xf…

数据分析实战:利用python对心脏病数据集进行分析

↑ 关注 星标 ~ 有趣的不像个技术号 每晚九点&#xff0c;我们准时相约 我们都很害怕生病&#xff0c;但感冒发烧这种从小到大的疾病我们已经麻木了&#xff0c;因为一星期他就会好&#xff0c;但是随着长大&#xff0c;各种发炎、三高、心脏病、冠心病响应而生。 心脏病作为…

python毕业设计 医学大数据分析 - 心血管疾病分析

# 1 前言 &#x1f6a9; 基于大数据的心血管疾病分析 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 选题指导&#xff0c;项目分享&#xff1a; https://gitee.com/yaa-dc/warehouse-1/blob…

Python数据分析—基于机器学习的UCI心脏病数据分析(源码+数据+分析设计)

本设计源码、数据和设计已经开源&#xff0c;点击链接下载&#xff0c;喜欢的话就点赞加收藏吧&#xff01; 下载链接&#xff1a;https://pan.baidu.com/s/1ys2F6ZH4EgnFdVP2mkTcsA?pwdLCFZ 提取码&#xff1a;LCFZ 研究基础 心脏病是一类比较常见的循环系统疾病。循环系统…

【毕业设计】大数据心血管疾病数据分析(医学大数据分析)

文章目录 0 前言1 课题背景2 数据处理3 数据可视化4 最后 0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对毕设的要求越来越高&#xff…

【毕业设计】医学大数据分析 - 心血管疾病分析

1 前言 &#x1f6a9; 基于大数据的心血管疾病分析 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 &#x1f9ff; 选题指导, 项目分享&#xff1a; https://gitee.com/dancheng-senior/proje…

大厂开源之殇

‍ 本轮开源之风吹起迄今数年&#xff0c;最大的影响还是越来越多的商业公司开始探索开源方法能够如何改变自己的经营策略。 开源策略循序渐进分成使用、参与和发起。 在发起开源项目实践一线的&#xff0c;一个是打着开源旗号的创业公司&#xff0c;另一个就是大型企业尤其互联…

Zerobot僵尸网络出现了新的漏洞利用和功能

©网络研究院 Zerobot DDoS僵尸网络已经获得了重大更新&#xff0c;扩展了其针对更多互联网连接设备和扩展网络的能力。 微软威胁情报中心 (MSTIC)正在以DEV-1061的名称跟踪持续的威胁&#xff0c;名称为未知、新兴或发展中的活动群集。 本月早些时候&#xff0c;Fort…

github action 基于个人项目实践

前言: DevOps 和 Jenkins 作为一名开发&#xff0c;虽然也没有经常听到 Devops &#xff08;研发和运维一体化&#xff09;这个概念&#xff0c;但日常工作中已经无处不在地用着 DevOps 工具。自研也好&#xff0c;基于开源项目改造也好&#xff0c;互联网公司基本都会有自已的…

张晴晴:对话数据推动AIGC——大模型底层数据探索

“Training data is technology” . 数据即科技&#xff0c;OpenAI的联合创始人IlyaSutskever在与知名科技媒体The Verge访谈中提到。ChatGPT自发布以来热度席卷全球&#xff0c;一周前惊艳亮相的GPT-4更是让人感叹我们迎来了AI发展的历史性时刻。 然而我们也困惑&#xff0c;O…

通过CSIG—走进合合信息探讨生成式AI及文档图像处理的前景和价值

一、前言 最近有幸参加了由中国图象图形学学会&#xff08;CSIG&#xff09;主办&#xff0c;合合信息、CSIG文档图像分析与识别专业委员会联合承办的“CSIG企业行——走进合合信息”的分享会&#xff0c;这次活动以“图文智能处理与多场景应用技术展望”为主题&#xff0c;聚…

期权专题2:备兑期权

组合期权在四种基本期权的基础上&#xff0c;进行组合&#xff0c;构建出对应的策略。我们先回顾一下基本期权的定价代码。 def option_price(type, dir, S, K None, cost None):获取期权的价值,权利金默认为50Parameters----------type:期权类型,put表示看跌,call表示看涨,…

期权 证券 股票(沪深300ETF)等数据获取

Python 使用tushare模块&#xff0c;这些需要积分&#xff0c;临时使用推荐在闲鱼上买一个月/半年的账号&#xff08;期权需要5000积分&#xff0c;普通的股票只需要2000积分&#xff09;&#xff0c;不要选择淘宝的单次代下载&#xff08;又贵又不方便&#xff09;&#xff0c…

[QMT]05-获取基础行情信息

函数&#xff1a;获取合约基础信息 get_instrument_detail(stock_code) 1 释义 获取合约基础信息 参数 stock_code - string 合约代码 返回 dict 数据字典&#xff0c;{ field1 : value1, field2 : value2, ... }&#xff0c;找不到指定合约时返回None ExchangeID - string 合约…