Sentry 开发者贡献指南 - 浏览器 SDK 集成测试
Sentry
的浏览器 SDK
的集成测试在内部使用 Playwright。这些测试在 Chromium
、Firefox
和 Webkit
的最新稳定版本上运行。
结构
测试按其范围分组,例如 breadcrumbs
或 onunhandledrejection
。在每组测试中,都有多个包含测试用例及其可选支持资源的文件夹。
每个用例组都有一个名为 template.hbs
的默认 HTML skeleton
,以及一个名为 init.js
的默认初始化脚本,其中包含 Sentry.init()
调用。当特定的 template.hbs
或 init.js
未在用例文件夹中定义时,这些默认值用作后备。
subject.js
包含设置要测试的环境的逻辑。它也可以在本地定义并作为组后备。与 template.hbs
和 init.js
不同,它不需要为组定义,因为可能存在不需要 subject
的情况,而是使用 utils/helpers.ts
中的 injectScriptAndGetEvents
注入逻辑。
每个测试用例都需要 test.ts
,其中包含断言(如果需要,还需要脚本注入逻辑)。对于每种情况,任何一组 init.js
、template.hbs
和 subject.js
都可以在本地定义,并且它们中的每一个都将优先于测试组的默认定义。
suites/
|---- breadcrumbs/
|---- template.hbs [面包屑测试的 fallback 模板]
|---- init.js [面包屑测试的 fallback init]
|---- subject.js [面包屑测试的可选 fallback subject]
|---- click_event_tree/
|---- template.hbs [可选用例特定模板]
|---- init.js [可选的特定于用例的 init]
|---- subject.js [可选案例特定 subject]
|---- test.ts [断言]
编写测试
Helpers
utils/helpers.ts
包含可以在断言中使用的 helper
(test.ts
)。这些 helper
定义了一个方便可靠的 API
来与 Playwright
的原生 API
进行交互。强烈建议在 helper
中定义所有常见的 Playwright
使用模式。
Fixtures
Fixtures 允许我们在断言组(test.ts
文件)中定义全局和特定于测试的信息。在当前状态下,fixtures.ts
包含对 Playwright
的 test()
函数的 pure
版本的扩展。所有测试都应该从 utils/fixtures.ts
而不是 @playwright/test
导入 sentryTest
函数,以便能够访问额外的 fixtures
。
在本地运行测试
可以使用最新版本的 Chromium
在本地运行测试:
yarn test
要使用不同的浏览器(例如 firefox
或 webkit
)运行测试:
yarn test --browser='firefox'
yarn test --browser='webkit'
或者在所有三个浏览器上运行:
yarn test --browser='all'
按 title
过滤测试:
yarn test -g "XMLHttpRequest without any handlers set"
您可以参考 Playwright 文档了解其他 CLI
选项。
故障排除
除了特定于 Playwright 的问题外,以下是为 Sentry Browser SDK
编写测试时可能出现的常见问题。
不稳定的测试
如果测试随机失败,给出
Page Closed
、Target Closed
或类似错误,大多数情况下,原因是subject
中定义的page action
与 Sentryevent/request
的侦听器之间存在竞争条件。建议首先检查utils/helpers.ts
是否可以用其中一个helper
替换异步逻辑。如果不是,是否可以由Promise.all
编排等待(或在某些情况下故意非等待)的Playwright
方法。不建议手动定义等待逻辑,例如超时,并且在大多数情况下不需要。构建错误
在运行之前,每个测试用例的页面都会在
dist
内的case
文件夹下构建。如果页面构建失败,建议检查:- 测试组是否定义了默认的
template.hbs
和init.js
。 - 测试用例是否定义了
subject.js
。 init.js
或subject.js
中的任何一个是否包含非浏览器代码。webpack
配置是否有效。
- 测试组是否定义了默认的
实战
进入 sentry-javascript 项目:
安装依赖
cd sentry-javascript
yarn
yarn lerna bootstrap
yarn build
Playwright 运行集成测试
进入集成测试软件包 sentry-javascript/packages/integration-tests
:
cd packages/integration-tests
# PWDEBUG=1 yarn test -> 打开 Playwright Inspector
yarn test
更多
Sentry 开发者贡献指南 - 浏览器 SDK 集成测试的更多相关文章
- Sentry 开发者贡献指南 - SDK 开发(性能监控)
内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...
- Sentry 开发者贡献指南 - SDK 开发(事件负载)
内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...
- Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)
内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...
- Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- Sentry 开发者贡献指南 - Feature Flag
功能 flag 在 Sentry 的代码库中声明. 对于自托管用户,这些标志然后通过 sentry.conf.py 进行配置. 对于 Sentry 的 SaaS 部署,Flagr 用于在生产中配置标志 ...
- Sentry 开发者贡献指南 - Django Rest Framework(Serializers)
Serializer 用于获取复杂的 python 模型并将它们转换为 json.序列化程序还可用于在验证传入数据后将 json 反序列化回 Python 模型. 在 Sentry,我们有两种不同类型 ...
- Sentry 开发者贡献指南 - 前端 React Hooks 与虫洞状态管理模式
系列 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS) 什么是虫洞状态管理模式? 您可以逃脱的最小 ...
- Sentry 开发者贡献指南 - 配置 PyCharm
概述 如果您使用 PyCharm 进行开发,则需要配置一些内容才能运行和调试. 本文档描述了一些对 sentry 开发有用的配置 配置 Python 解释器:(确保它是 venv 解释器)例如 ~/v ...
- Sentry 开发者贡献指南 - 数据库迁移
Django 迁移是我们处理 Sentry 中数据库更改的方式. Django 迁移官方文档:https://docs.djangoproject.com/en/2.2/topics/migratio ...
随机推荐
- ligerui有时候竖直的线没对齐,是因为某一列的内容太长,此刻可以调整一下此列的宽度为适当的值便可消除此现象
ligerui有时候竖直的线没对齐,是因为某一列的内容太长,此刻可以调整一下此列的宽度为适当的值便可消除此现象
- windows使用natapp教程
这种免费的 有个缺点 过段时间就会连接不上,需要不定时更换域名地址 Linux系统参考:https://www.cnblogs.com/pxblog/p/10549847.html 官网地址:http ...
- vc mfc listctrl使用虚拟列表 虚拟列表用法
note 虚拟列表可有效加载大量数据 需要处理listctrl的 LVN_GETDISPINFO 消息 使用虚拟列表 不能 使用 insert的方法插入数据,而是告诉listctrl 当前要显示多少行 ...
- 创建Ubuntu server 服务器git项目
服务器端: mkdir project.git cd project.git git init --bare cd .. p.p1 { margin: 0; font: 11px Menlo; col ...
- MFC屏蔽按键ESC、ENTER、Alt+F4
1.重写 重写下面的函数 virtual BOOL PreTranslateMessage(MSG* pMsg); 2.函数体 BOOL Cfile_trans_codeDlg::PreTransla ...
- 【LeetCode】198. House Robber 打家劫舍 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 递归 + 记忆化 动态规划 优化动态规划空间 ...
- 【LeetCode】105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcod ...
- Python 英语单词本
python pymysql re requests socket库的简单运用 要考试了,这里用所学的知识做一个实例 pymysql库 这个库是用来连接数据库的,使用数据库语句在python里创建表和 ...
- Codeforces 450D:Jzzhu and Cities(最短路,dijkstra)
D. Jzzhu and Cities time limit per test: 2 seconds memory limit per test: 256 megabytes input: stand ...
- gojs 如何实现虚线(蚂蚁线)动画?
在绘制 dag 图时,通过节点和来箭头的连线来表示节点彼此之间的关系.而节点常常又带有状态,为了更好的表示节点之间的流程关系,loading 状态的节点,与后续节点之间,需要用 动画着的虚线 表示,表 ...