Sentry 的浏览器 SDK 的集成测试在内部使用 Playwright。这些测试在 ChromiumFirefoxWebkit 的最新稳定版本上运行。

结构

测试按其范围分组,例如 breadcrumbsonunhandledrejection。在每组测试中,都有多个包含测试用例及其可选支持资源的文件夹。

每个用例组都有一个名为 template.hbs 的默认 HTML skeleton,以及一个名为 init.js 的默认初始化脚本,其中包含 Sentry.init() 调用。当特定的 template.hbsinit.js 未在用例文件夹中定义时,这些默认值用作后备。

subject.js 包含设置要测试的环境的逻辑。它也可以在本地定义并作为组后备。与 template.hbsinit.js 不同,它不需要为组定义,因为可能存在不需要 subject 的情况,而是使用 utils/helpers.ts 中的 injectScriptAndGetEvents 注入逻辑。

每个测试用例都需要 test.ts,其中包含断言(如果需要,还需要脚本注入逻辑)。对于每种情况,任何一组 init.jstemplate.hbssubject.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 包含可以在断言中使用的 helpertest.ts)。这些 helper 定义了一个方便可靠的 API 来与 Playwright 的原生 API 进行交互。强烈建议在 helper 中定义所有常见的 Playwright 使用模式。

Fixtures

Fixtures 允许我们在断言组(test.ts 文件)中定义全局和特定于测试的信息。在当前状态下,fixtures.ts 包含对 Playwrighttest() 函数的 pure 版本的扩展。所有测试都应该从 utils/fixtures.ts 而不是 @playwright/test 导入 sentryTest 函数,以便能够访问额外的 fixtures

在本地运行测试

可以使用最新版本的 Chromium 在本地运行测试:

yarn test

要使用不同的浏览器(例如 firefoxwebkit)运行测试:

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 ClosedTarget Closed 或类似错误,大多数情况下,原因是 subject 中定义的 page action 与 Sentry event/request 的侦听器之间存在竞争条件。建议首先检查 utils/helpers.ts 是否可以用其中一个 helper 替换异步逻辑。如果不是,是否可以由 Promise.all 编排等待(或在某些情况下故意非等待)的 Playwright 方法。不建议手动定义等待逻辑,例如超时,并且在大多数情况下不需要。

  • 构建错误

    在运行之前,每个测试用例的页面都会在 dist 内的 case 文件夹下构建。如果页面构建失败,建议检查:

    • 测试组是否定义了默认的 template.hbsinit.js
    • 测试用例是否定义了 subject.js
    • init.jssubject.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 集成测试的更多相关文章

  1. Sentry 开发者贡献指南 - SDK 开发(性能监控)

    内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...

  2. Sentry 开发者贡献指南 - SDK 开发(事件负载)

    内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...

  3. Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)

    内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...

  4. Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  5. Sentry 开发者贡献指南 - Feature Flag

    功能 flag 在 Sentry 的代码库中声明. 对于自托管用户,这些标志然后通过 sentry.conf.py 进行配置. 对于 Sentry 的 SaaS 部署,Flagr 用于在生产中配置标志 ...

  6. Sentry 开发者贡献指南 - Django Rest Framework(Serializers)

    Serializer 用于获取复杂的 python 模型并将它们转换为 json.序列化程序还可用于在验证传入数据后将 json 反序列化回 Python 模型. 在 Sentry,我们有两种不同类型 ...

  7. Sentry 开发者贡献指南 - 前端 React Hooks 与虫洞状态管理模式

    系列 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS) 什么是虫洞状态管理模式? 您可以逃脱的最小 ...

  8. Sentry 开发者贡献指南 - 配置 PyCharm

    概述 如果您使用 PyCharm 进行开发,则需要配置一些内容才能运行和调试. 本文档描述了一些对 sentry 开发有用的配置 配置 Python 解释器:(确保它是 venv 解释器)例如 ~/v ...

  9. Sentry 开发者贡献指南 - 数据库迁移

    Django 迁移是我们处理 Sentry 中数据库更改的方式. Django 迁移官方文档:https://docs.djangoproject.com/en/2.2/topics/migratio ...

随机推荐

  1. java 编程基础 Class对象 反射 :参数反射

    方法参数反射 Java8在java.lang.reflect包下新增了Executable抽象基类,该对象代表可执行的类成员,该类派生了Constructor和Method两个子类.Executabl ...

  2. docker启动redis报错 oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

    docker启动redis报错 1:C 17 Jun 08:18:04.613 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo1:C 17 Jun 08 ...

  3. 【LeetCode】333. Largest BST Subtree 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  4. 【LeetCode】71. Simplify Path 解题报告(Python)

    [LeetCode]71. Simplify Path 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...

  5. 【剑指Offer】和为S的连续正数序列 解题报告(Python)

    [剑指Offer]和为S的连续正数序列 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ...

  6. 1144 - Ray Gun

    1144 - Ray Gun    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You are ...

  7. 【C\C++笔记】指针输出字符串

    1错误代码 #include<stdio.h> int main(){ char a[]="hello"; char *p=a; for(int i=0;i<5; ...

  8. element 表格只展开一行(点击下一行上一行关闭)

    源码:第一步 <el-table :data="tableData" border :row-class-name="tableRowClassName" ...

  9. [高数]高数部分-Part II 导数与微分

    Part II 导数与微分 回到总目录 Part II 导数与微分 一元函数微分的定义 一元函数定义注意点 基本求导公式 基本求导方法 复合函数求导 隐函数求导 对数求导法 反函数求导 参数方程求导 ...

  10. 啥是Gossip协议?

    你好呀,我是歪歪. 元旦的时候我看到一个特别离谱的谣言啊,具体是什么内容我就不说了,我怕脏了大家的眼睛. 但是,我看到一个群里传的那叫一个绘声绘色,大家讨论的风生水起的,仿佛大家就在现场似的. 这事吧 ...