当前位置: 首页 > 科技观察

Sentry开发者贡献指南-浏览器SDK集成测试

时间:2023-03-11 20:42:35 科技观察

Sentry的浏览器SDK集成测试在内部使用Playwright。这些测试是在最新稳定版本的Chromium、Firefox和Webkit上运行的。https://playwright.dev/结构测试按范围分组,例如面包屑或onunhandledrejection。在每组测试中,有多个文件夹包含测试用例及其可选的支持资源。每个用例组都有一个名为template.hbs的默认HTML框架,以及一个名为init.js的默认初始化脚本,其中包含Sentry.init()调用。当用例文件夹中未定义特定的template.hbs或init.js时,这些默认值用作回退。subject.js包含设置要测试的环境的逻辑。也可以在本地定义并作为一个组备份。与template.hbs和init.js不同,它不需要为组定义,因为可能存在不需要主题的情况,而是使用utils/helpers.ts中的injectScriptAndGetEvents注入逻辑。每个测试用例都需要test.ts,其中包含断言(如果需要,还包含脚本注入逻辑)。对于每种情况,可以在本地定义任何一组init.js、template.hbs和subject.js,并且它们中的每一个都将优先于测试集的默认定义。suites/|----breadcrumbs/|----template.hbs[面包屑测试的后备模板]|----init.js[面包屑测试的后备初始化]|----subject.js[可选的后备|----click_event_tree/|----template.hbs[可选的特定用例模板]|----init.js[可选的特定用例初始化]|----subject.js[可选的特定案例主题]|----test.ts[断言]编写测试Helpersutils/helpers.ts包含可用于断言的助手(test.ts)。这些助手定义了一个方便可靠的API来与Playwright的本机API进行交互。强烈建议在帮助程序中定义所有常见的Playwright使用模式。FixturesFixtures允许我们在断言组(test.ts文件)中定义全局和特定于测试的信息。在当前状态下,fixtures.ts包含对Playwright的test()函数的纯版本的扩展。所有测试都应从utils/fixtures.ts导入sentryTest函数而不是@playwright/test以访问额外的固定装置。https://playwright.dev/docs/api/class-fixtures在本地运行测试您可以使用最新版本的Chromium在本地运行测试:yarntest以不同的浏览器(例如firefox或webkit)运行测试:yarntest--browser='firefox'yarntest--browser='webkit'或者在所有三个浏览器上运行:yarntest--browser='all'按标题过滤测试:yarntest-g"XMLHttpRequestwithoutanyhandlersset"您可以参考Playwright文档了解其他CLI选项。https://playwright.dev/docs/test-cli故障排除除了Playwright特有的问题外,以下是为Sentry浏览器SDK编写测试时可能出现的常见问题。https://playwright.dev/docs/troubleshooting不稳定的测试如果测试随机失败,给出PageClosed,TargetClosed或类似错误,大多数情况下,原因是主题中定义的页面动作不是与哨兵兼容事件/请求的侦听器之间存在竞争条件。建议首先检查utils/helpers.ts是否可以用这些助手之一替换异步逻辑。如果没有,是否可以通过Promise.all编排等待的(或在某些情况下故意不等待的)剧作家方法。不建议手动定义等待逻辑,例如超时,并且在大多数情况下不需要。http://mdn.io/promise.all构建错误在运行之前,每个测试用例页面都会在dist中的case文件夹下构建。如果页面构建失败,建议检查:测试组是否定义了默认的template.hbs和init.js。测试用例是否定义了subject.js。init.js或subject.js是否包含非浏览器代码。webpack配置是否有效。实战中进入sentry-javascript项目:https://github.com/getsentry/sentry-javascript.git安装依赖cdsentry-javascriptyarnyarnlernabootstrapyarnbuildPlaywright运行集成测试进入集成测试软件包sentry-javascript/packages/integration-tests:cdpackages/integration-tests#PWDEBUG=1yarntest->打开PlaywrightInspectoryarntest