playwright-performance-reporter
Version:
Measure and publish performance metrics from browser dev-tools when running playwright
93 lines (92 loc) • 3.02 kB
TypeScript
import type CDP from 'chrome-remote-interface';
import { type MeasurePlugin, type OnSamplingMeasure, type OnStartMeasure, type OnStopMeasure, type ResultAccumulator } from './index.js';
/**
* Supported hooks to run measurements on
*/
export declare const hooks: readonly ["onTest", "onTestStep"];
export type Hooks = typeof hooks[number];
export declare const hookOrder: readonly ["onStart", "onSampling", "onStop"];
export type HookOrder = typeof hookOrder[number];
/**
* Common interface to define procedures to observe metrics
*/
export type MetricObserver<T> = {
name: string;
plugins: Array<MeasurePlugin<T>>;
onStart: OnStartMeasure<T>;
onSampling: OnSamplingMeasure<T>;
onStop: OnStopMeasure<T>;
};
/**
* Define which metric should regularly be requested
*/
export type MetricSampling<T> = {
samplingTimeoutInMilliseconds: number;
metric: MetricObserver<T>;
};
/**
* Supported browser dev tool clients
*/
export type BrowserDeveloperToolsClient = {
chromium: CDP.Client;
webkit: Record<string, unknown>;
firefox: Record<string, unknown>;
};
/**
* Browsers that have been tested to work with performance metric extraction
*/
export declare const supportedBrowsers: readonly ["chromium", "webkit", "firefox"];
export type SupportedBrowsers = typeof supportedBrowsers[number];
/**
* Chromium specific metric observer and measure plugin
*/
export type ChromiumMetricObserver = MetricObserver<BrowserDeveloperToolsClient['chromium']>;
export type ChromiumMeasurePlugin = MeasurePlugin<BrowserDeveloperToolsClient['chromium']>;
/**
* Firefox specific metric observer and measure plugin.
*/
export type FirefoxMetricObserver = MetricObserver<BrowserDeveloperToolsClient['firefox']>;
export type FirefoxMeasurePlugin = MeasurePlugin<BrowserDeveloperToolsClient['firefox']>;
/**
* Webkit specific metric observer and measure plugin.
*/
export type WebkitMetricObserver = MetricObserver<BrowserDeveloperToolsClient['webkit']>;
export type WebkitMeasurePlugin = MeasurePlugin<BrowserDeveloperToolsClient['webkit']>;
/**
* Options to customize the reporter for a specific browser.
*/
type BrowserOptions = {
[browser in SupportedBrowsers]?: Partial<Record<Hooks, {
metrics: Array<MetricObserver<BrowserDeveloperToolsClient[browser]>>;
}>> & {
sampling?: {
metrics: Array<MetricSampling<BrowserDeveloperToolsClient[browser]>>;
};
};
};
export type PresenterWriter = {
/**
* Create new entry of an object
*
* @param content
*/
write(content: ResultAccumulator): Promise<boolean>;
/**
* Finish json stream
*/
close(): Promise<boolean>;
/**
* Delete created target
*/
delete(): Promise<boolean>;
};
/**
* Customize the reporter with desired browser and (custom) metrics
*/
export type Options = {
deleteOnFailure: boolean;
presenters?: PresenterWriter[];
browsers: BrowserOptions;
};
export declare const defaultOptions: Options;
export {};