Playwright
在 Playwright 中,获取上下文,在用例执行时将覆盖率数据写入到本地文件,最后使用 canyon-uploader 工具聚合上报。
覆盖率数据写入本地文件
以下是 nodejs 代码示例:
import * as fs from 'fs';
import * as path from 'path';
import {test as baseTest} from '@playwright/test';
const canyonOutputDirPath = path.join(process.cwd(), '.canyon_output');
export const test = baseTest.extend({
context: async ({context}, use) => {
await context.addInitScript(() =>
window.addEventListener('beforeunload', () =>
(window as any).collectIstanbulCoverage((window as any).__coverage__)
),
);
await fs.promises.mkdir(canyonOutputDirPath, {recursive: true});
await context.exposeFunction('collectIstanbulCoverage', (coverageJSON) => {
console.log('Coverage collected',coverageJSON);
if (coverageJSON) {
fs.writeFileSync(path.join(canyonOutputDirPath, `coverage-final-${new Date().valueOf()}.json`), JSON.stringify(coverageJSON));
}
});
await use(context);
for (const page of context.pages()) {
await page.evaluate(() => (window as any).collectIstanbulCoverage((window as any).__coverage__));
}
}
});
export const expect = test.expect;
聚合上报
使用 canyon-uploader 工具聚合上报,具体使用方式请查看 canyon-uploader 文档。
./canyon-uploader --dsn=https://canyonjs.org