@lokalise/playwright-reporters 1.3.0 → 1.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/dist/playwright.config.js +3 -3
- package/dist/playwright.config.js.map +1 -1
- package/dist/src/analytics/elastic.d.ts +4 -1
- package/dist/src/analytics/elastic.js +14 -3
- package/dist/src/analytics/elastic.js.map +1 -1
- package/dist/src/analytics/logger.js.map +1 -1
- package/dist/src/analytics/reporter.d.ts +21 -8
- package/dist/src/analytics/reporter.js +88 -16
- package/dist/src/analytics/reporter.js.map +1 -1
- package/dist/src/analytics/tests/browserUsage.test.d.ts +1 -0
- package/dist/src/analytics/tests/browserUsage.test.js +42 -0
- package/dist/src/analytics/tests/browserUsage.test.js.map +1 -0
- package/dist/src/analytics/tests/transform.test.js +77 -77
- package/dist/src/analytics/tests/transform.test.js.map +1 -1
- package/dist/src/analytics/transform.d.ts +25 -10
- package/dist/src/analytics/transform.js +43 -19
- package/dist/src/analytics/transform.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/retry/reporter.d.ts +1 -1
- package/dist/src/retry/reporter.js +30 -32
- package/dist/src/retry/reporter.js.map +1 -1
- package/package.json +20 -17
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ This is a collection of reporters to use with our Playwright test frameworks.
|
|
|
5
5
|
## Key Features
|
|
6
6
|
|
|
7
7
|
- Retry reporter: Provides an easy way to retry failed tests on Jenkins or locally.
|
|
8
|
-
- Analytics reporter: Uploads test results to ElasticSearch for further analysis.
|
|
8
|
+
- Analytics reporter: Uploads test results and browser usage to ElasticSearch for further analysis.
|
|
9
9
|
|
|
10
10
|
## Getting Started
|
|
11
11
|
|
|
@@ -28,10 +28,14 @@ export default defineConfig({
|
|
|
28
28
|
flakyTestIndex: 'flaky_tests_0001',
|
|
29
29
|
failedTestIndex: 'non_passing_tests_0001',
|
|
30
30
|
testRunIndex: 'test_run_0001',
|
|
31
|
-
|
|
31
|
+
browserUsageIndex: 'browser_usage_0001',
|
|
32
|
+
elasticUrl: 'http://elasticUrl',
|
|
32
33
|
elasticToken: 'elasticToken',
|
|
33
34
|
currentBuildId: 'buildId',
|
|
34
|
-
debug:
|
|
35
|
+
debug: true,
|
|
36
|
+
dryRun: false,
|
|
37
|
+
prenvId: 'develop',
|
|
38
|
+
product: 'product',
|
|
35
39
|
})],
|
|
36
40
|
],
|
|
37
41
|
...
|
|
@@ -4,11 +4,11 @@ const test_1 = require("@playwright/test");
|
|
|
4
4
|
// eslint-disable-next-line import/no-default-export
|
|
5
5
|
exports.default = (0, test_1.defineConfig)({
|
|
6
6
|
retries: 0,
|
|
7
|
-
reporter: [[
|
|
7
|
+
reporter: [['list'], ['html', { open: 'never' }]],
|
|
8
8
|
projects: [
|
|
9
9
|
{
|
|
10
|
-
name:
|
|
11
|
-
testMatch:
|
|
10
|
+
name: 'analytics',
|
|
11
|
+
testMatch: 'src/analytics/tests/*.test.ts',
|
|
12
12
|
},
|
|
13
13
|
],
|
|
14
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.config.js","sourceRoot":"","sources":["../playwright.config.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"playwright.config.js","sourceRoot":"","sources":["../playwright.config.ts"],"names":[],"mappings":";;AAAA,2CAA+C;AAE/C,oDAAoD;AACpD,kBAAe,IAAA,mBAAY,EAAC;IAC3B,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,QAAQ,EAAE;QACT;YACC,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,+BAA+B;SAC1C;KACD;CACD,CAAC,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { type formBuildData, type formFailedTestData, type formFlakyTestData } from
|
|
1
|
+
import { type formBrowserUsageData, type formBuildData, type formFailedTestData, type formFlakyTestData } from './transform';
|
|
2
2
|
export interface ElasticConfig {
|
|
3
3
|
flakyTestIndex: string;
|
|
4
4
|
failedTestIndex: string;
|
|
5
5
|
testRunIndex: string;
|
|
6
|
+
browserUsageIndex?: string;
|
|
6
7
|
elasticUrl: string;
|
|
7
8
|
elasticToken: string;
|
|
8
9
|
}
|
|
@@ -11,6 +12,7 @@ export declare class Elastic {
|
|
|
11
12
|
private readonly flakyTestIndex;
|
|
12
13
|
private readonly failedTestIndex;
|
|
13
14
|
private readonly testRunIndex;
|
|
15
|
+
private readonly browserUsageIndex;
|
|
14
16
|
private readonly elasticUrl;
|
|
15
17
|
private readonly elasticToken;
|
|
16
18
|
constructor(analyticsConfig: ElasticConfig);
|
|
@@ -18,6 +20,7 @@ export declare class Elastic {
|
|
|
18
20
|
saveFlakyData(flake: ReturnType<typeof formFlakyTestData>): Promise<void>;
|
|
19
21
|
saveFailedData(failure: ReturnType<typeof formFailedTestData>): Promise<void>;
|
|
20
22
|
saveBuildData(build: ReturnType<typeof formBuildData>): Promise<void>;
|
|
23
|
+
saveBrowserUsageData(usageData: ReturnType<typeof formBrowserUsageData>): Promise<void>;
|
|
21
24
|
getLastRunDataByTime(): Promise<string | null>;
|
|
22
25
|
getLastRunDataByPrenvIdAndProject(prenvId: string, projects?: string[]): Promise<string | null>;
|
|
23
26
|
}
|
|
@@ -8,6 +8,7 @@ class Elastic {
|
|
|
8
8
|
this.flakyTestIndex = analyticsConfig.flakyTestIndex;
|
|
9
9
|
this.failedTestIndex = analyticsConfig.failedTestIndex;
|
|
10
10
|
this.testRunIndex = analyticsConfig.testRunIndex;
|
|
11
|
+
this.browserUsageIndex = analyticsConfig?.browserUsageIndex;
|
|
11
12
|
this.elasticUrl = analyticsConfig.elasticUrl;
|
|
12
13
|
this.elasticToken = analyticsConfig.elasticToken;
|
|
13
14
|
}
|
|
@@ -46,6 +47,16 @@ class Elastic {
|
|
|
46
47
|
(0, logger_1.logger)(error);
|
|
47
48
|
}
|
|
48
49
|
}
|
|
50
|
+
async saveBrowserUsageData(usageData) {
|
|
51
|
+
try {
|
|
52
|
+
await this.request.post(`/${this.browserUsageIndex}/_doc`, {
|
|
53
|
+
data: usageData,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
(0, logger_1.logger)(error);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
49
60
|
async getLastRunDataByTime() {
|
|
50
61
|
try {
|
|
51
62
|
const response = await this.request.post(`/${this.testRunIndex}/_search`, {
|
|
@@ -53,7 +64,7 @@ class Elastic {
|
|
|
53
64
|
sort: [
|
|
54
65
|
{
|
|
55
66
|
startTime: {
|
|
56
|
-
order:
|
|
67
|
+
order: 'desc',
|
|
57
68
|
},
|
|
58
69
|
},
|
|
59
70
|
],
|
|
@@ -77,7 +88,7 @@ class Elastic {
|
|
|
77
88
|
must: [
|
|
78
89
|
{
|
|
79
90
|
term: {
|
|
80
|
-
prenvId
|
|
91
|
+
prenvId,
|
|
81
92
|
},
|
|
82
93
|
},
|
|
83
94
|
...(projects ?? []).map((project) => ({
|
|
@@ -91,7 +102,7 @@ class Elastic {
|
|
|
91
102
|
sort: [
|
|
92
103
|
{
|
|
93
104
|
startTime: {
|
|
94
|
-
order:
|
|
105
|
+
order: 'desc',
|
|
95
106
|
},
|
|
96
107
|
},
|
|
97
108
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elastic.js","sourceRoot":"","sources":["../../../src/analytics/elastic.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"elastic.js","sourceRoot":"","sources":["../../../src/analytics/elastic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/analytics/logger.ts"],"names":[],"mappings":";;;AAAO,MAAM,MAAM,GAAG,CAAC,GAAG,QAAmB,EAAE,EAAE;IAChD,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/analytics/logger.ts"],"names":[],"mappings":";;;AAAO,MAAM,MAAM,GAAG,CAAC,GAAG,QAAmB,EAAE,EAAE;IAChD,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;AACzB,CAAC,CAAA;AAHY,QAAA,MAAM,UAGlB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type FullConfig, type FullResult, type Reporter, type Suite, type TestCase, type TestResult, type TestStatus, type TestStep } from
|
|
2
|
-
import { type ElasticConfig } from
|
|
1
|
+
import { type FullConfig, type FullResult, type Reporter, type Suite, type TestCase, type TestResult, type TestStatus, type TestStep } from '@playwright/test/reporter';
|
|
2
|
+
import { type ElasticConfig } from './elastic';
|
|
3
3
|
export default class AnalyticsReporter implements Reporter {
|
|
4
|
-
readonly listOfNonPassingTests
|
|
5
|
-
readonly listOfFlakyTests
|
|
6
|
-
readonly browserCreationTimes
|
|
7
|
-
readonly
|
|
8
|
-
private elastic;
|
|
4
|
+
private readonly listOfNonPassingTests;
|
|
5
|
+
private readonly listOfFlakyTests;
|
|
6
|
+
private readonly browserCreationTimes;
|
|
7
|
+
private readonly browserUsage;
|
|
8
|
+
private readonly elastic;
|
|
9
9
|
private runStartTime;
|
|
10
10
|
private runEndTime;
|
|
11
11
|
private numberOfTests;
|
|
@@ -13,8 +13,12 @@ export default class AnalyticsReporter implements Reporter {
|
|
|
13
13
|
private projectNames;
|
|
14
14
|
private testOwnerCount;
|
|
15
15
|
private readonly options;
|
|
16
|
+
private readonly isMainPREnv;
|
|
17
|
+
private workerCount;
|
|
16
18
|
constructor(options: ReporterOptions);
|
|
19
|
+
private shouldSaveBrowserData;
|
|
17
20
|
onBegin(config: FullConfig, suite: Suite): Promise<void>;
|
|
21
|
+
onStepBegin(test: TestCase, result: TestResult, step: TestStep): void;
|
|
18
22
|
onStepEnd(test: TestCase, result: TestResult, step: TestStep): void;
|
|
19
23
|
onTestEnd(test: TestCase, result: TestResult): Promise<void>;
|
|
20
24
|
private onEndDebug;
|
|
@@ -33,7 +37,8 @@ type ReporterOptions = {
|
|
|
33
37
|
*/
|
|
34
38
|
dryRun?: boolean;
|
|
35
39
|
currentBuildId: string;
|
|
36
|
-
prenvId
|
|
40
|
+
prenvId: string;
|
|
41
|
+
product: 'autopilot' | 'expert';
|
|
37
42
|
} & ElasticConfig;
|
|
38
43
|
export interface TestAnalyticsData {
|
|
39
44
|
timestamp: number;
|
|
@@ -46,4 +51,12 @@ export interface TestAnalyticsData {
|
|
|
46
51
|
totalDuration: number;
|
|
47
52
|
retry?: number;
|
|
48
53
|
}
|
|
54
|
+
export type BrowserUsageData = {
|
|
55
|
+
createdBrowserCount: number;
|
|
56
|
+
data: Record<string, {
|
|
57
|
+
browserRequestTimestamp: number;
|
|
58
|
+
browserCreationTimestamp: number;
|
|
59
|
+
browserCloseTimestamp: number;
|
|
60
|
+
}>;
|
|
61
|
+
};
|
|
49
62
|
export {};
|
|
@@ -12,20 +12,39 @@ class AnalyticsReporter {
|
|
|
12
12
|
this.listOfNonPassingTests = [];
|
|
13
13
|
this.listOfFlakyTests = [];
|
|
14
14
|
this.browserCreationTimes = [];
|
|
15
|
-
this.
|
|
15
|
+
this.browserUsage = {
|
|
16
|
+
createdBrowserCount: 0,
|
|
17
|
+
data: {},
|
|
18
|
+
};
|
|
16
19
|
this.projectNames = [];
|
|
17
20
|
this.testOwnerCount = {};
|
|
18
21
|
this.testRunId = faker_1.faker.string.uuid();
|
|
19
22
|
this.runStartTime = Date.now();
|
|
20
23
|
this.runEndTime = Date.now();
|
|
21
24
|
this.numberOfTests = 0;
|
|
25
|
+
this.workerCount = 0;
|
|
26
|
+
this.isMainPREnv = (() => {
|
|
27
|
+
if (options.product === 'expert' && options.prenvId === 'develop') {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if (options.product === 'autopilot' && options.prenvId === 'main') {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
})();
|
|
22
35
|
this.elastic = new elastic_1.Elastic(options);
|
|
23
36
|
}
|
|
37
|
+
shouldSaveBrowserData(test) {
|
|
38
|
+
const isAPISuite = test?.parent?.project()?.name?.includes('api');
|
|
39
|
+
const isIndexProvided = this.options.browserUsageIndex !== undefined;
|
|
40
|
+
return !isAPISuite && isIndexProvided;
|
|
41
|
+
}
|
|
24
42
|
async onBegin(config, suite) {
|
|
25
43
|
try {
|
|
26
44
|
this.runStartTime = Date.now();
|
|
27
45
|
this.numberOfTests = suite.allTests().length;
|
|
28
46
|
this.projectNames = suite.suites.map((testSuite) => testSuite.title);
|
|
47
|
+
this.workerCount = config.workers;
|
|
29
48
|
if (!this.options.dryRun) {
|
|
30
49
|
await this.elastic.setNativeRequestContext();
|
|
31
50
|
}
|
|
@@ -34,24 +53,49 @@ class AnalyticsReporter {
|
|
|
34
53
|
console.error("Could not perform 'onBegin' analytics step", error);
|
|
35
54
|
}
|
|
36
55
|
}
|
|
56
|
+
onStepBegin(test, result, step) {
|
|
57
|
+
if (!this.shouldSaveBrowserData(test)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
if (step.title.toLowerCase().includes('create browser')) {
|
|
62
|
+
const testId = `${test.id}-${result.retry ?? 0}`;
|
|
63
|
+
this.browserUsage.data[testId] = {
|
|
64
|
+
browserRequestTimestamp: step.startTime.getTime(),
|
|
65
|
+
browserCreationTimestamp: 0,
|
|
66
|
+
browserCloseTimestamp: 0,
|
|
67
|
+
};
|
|
68
|
+
this.browserUsage.createdBrowserCount++;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error("Could not perform 'onStepBegin' analytics step", error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
37
75
|
onStepEnd(test, result, step) {
|
|
38
76
|
try {
|
|
39
|
-
if (step.title.toLowerCase().includes(
|
|
77
|
+
if (step.title.toLowerCase().includes('create browser')) {
|
|
40
78
|
this.browserCreationTimes.push(step.duration);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
79
|
+
if (!this.shouldSaveBrowserData(test)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const testId = `${test.id}-${result.retry ?? 0}`;
|
|
83
|
+
this.browserUsage.data[testId] = {
|
|
84
|
+
...this.browserUsage.data[testId],
|
|
85
|
+
browserCreationTimestamp: step.startTime.getTime() + step.duration,
|
|
86
|
+
};
|
|
44
87
|
}
|
|
45
88
|
}
|
|
46
89
|
catch (error) {
|
|
47
90
|
console.error("Could not perform 'onStepEnd' analytics step", error);
|
|
48
91
|
}
|
|
49
92
|
}
|
|
93
|
+
// eslint-disable-next-line max-statements
|
|
50
94
|
async onTestEnd(test, result) {
|
|
51
95
|
try {
|
|
52
96
|
const { status, retry: currentRetryCount } = result;
|
|
53
97
|
const { retries: maxRetriesCount } = test;
|
|
54
|
-
if ([
|
|
98
|
+
if (['failed', 'timedOut', 'interrupted'].includes(status) &&
|
|
55
99
|
currentRetryCount === maxRetriesCount) {
|
|
56
100
|
const failedTest = (0, transform_1.formFailedTestData)(test, result, this.testRunId, this.options.prenvId);
|
|
57
101
|
this.listOfNonPassingTests.push(failedTest);
|
|
@@ -59,7 +103,7 @@ class AnalyticsReporter {
|
|
|
59
103
|
await this.elastic.saveFailedData(failedTest);
|
|
60
104
|
}
|
|
61
105
|
}
|
|
62
|
-
else if ([
|
|
106
|
+
else if (['passed'].includes(status) && currentRetryCount) {
|
|
63
107
|
const flakyTest = (0, transform_1.formFlakyTestData)(test, result, this.testRunId, this.options.prenvId);
|
|
64
108
|
this.listOfFlakyTests.push(flakyTest);
|
|
65
109
|
if (!this.options.dryRun) {
|
|
@@ -70,20 +114,38 @@ class AnalyticsReporter {
|
|
|
70
114
|
const ownerTeamNames = (0, transform_1.getTeamNames)(test);
|
|
71
115
|
this.testOwnerCount = (0, transform_1.addTeamCount)(this.testOwnerCount, ownerTeamNames);
|
|
72
116
|
}
|
|
117
|
+
if (!this.shouldSaveBrowserData(test)) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const testId = `${test.id}-${result.retry ?? 0}`;
|
|
121
|
+
this.browserUsage.data[testId] = {
|
|
122
|
+
...this.browserUsage.data[testId],
|
|
123
|
+
browserCloseTimestamp: result.startTime.getTime() + result.duration,
|
|
124
|
+
};
|
|
125
|
+
if (!this.browserUsage.data[testId].browserRequestTimestamp &&
|
|
126
|
+
this.browserUsage.data[testId].browserCloseTimestamp) {
|
|
127
|
+
this.browserUsage.data[testId].browserRequestTimestamp = result.startTime.getTime();
|
|
128
|
+
}
|
|
129
|
+
if (!this.browserUsage.data[testId].browserCreationTimestamp &&
|
|
130
|
+
this.browserUsage.data[testId].browserCloseTimestamp) {
|
|
131
|
+
this.browserUsage.data[testId].browserCreationTimestamp = result.startTime.getTime();
|
|
132
|
+
}
|
|
73
133
|
}
|
|
74
134
|
catch (error) {
|
|
75
135
|
console.error("Could not perform 'onTestEnd' analytics step", error);
|
|
76
136
|
}
|
|
77
137
|
}
|
|
78
|
-
onEndDebug(buildData) {
|
|
138
|
+
onEndDebug(buildData, browserUsageData) {
|
|
79
139
|
(0, transform_1.calculateRuntime)(this.runStartTime);
|
|
80
140
|
(0, transform_1.calculateRetriedTests)(this.listOfFlakyTests);
|
|
81
|
-
console.log(
|
|
141
|
+
console.log('NON PASSING TESTS');
|
|
82
142
|
console.table(this.listOfNonPassingTests);
|
|
83
|
-
console.log(
|
|
143
|
+
console.log('FLAKY TESTS');
|
|
84
144
|
console.table(this.listOfFlakyTests);
|
|
85
|
-
console.log(
|
|
145
|
+
console.log('RUN DATA');
|
|
86
146
|
console.table([buildData]);
|
|
147
|
+
console.log('BROWSER USAGE DATA');
|
|
148
|
+
console.log(browserUsageData);
|
|
87
149
|
}
|
|
88
150
|
async onEnd(result) {
|
|
89
151
|
try {
|
|
@@ -105,7 +167,7 @@ class AnalyticsReporter {
|
|
|
105
167
|
return await this.elastic.getLastRunDataByTime();
|
|
106
168
|
};
|
|
107
169
|
const buildIDWithPrefix = this.options?.dryRun === true
|
|
108
|
-
?
|
|
170
|
+
? 'dryRun'
|
|
109
171
|
: transform_1.getBuildIdWithPrefix.bind(this)(await getLastBuildData(), this.options.currentBuildId);
|
|
110
172
|
const buildData = (0, transform_1.formBuildData)({
|
|
111
173
|
result,
|
|
@@ -115,19 +177,29 @@ class AnalyticsReporter {
|
|
|
115
177
|
numberOfTests: this.numberOfTests,
|
|
116
178
|
failedTests: this.listOfNonPassingTests,
|
|
117
179
|
flakyTests: this.listOfFlakyTests,
|
|
118
|
-
|
|
119
|
-
browserClose: this.browserClosingTimes.reduce((acc, current) => acc + current, 0),
|
|
180
|
+
browserCreationTimes: this.browserCreationTimes,
|
|
120
181
|
project: projectData,
|
|
121
182
|
teamStats: this.testOwnerCount,
|
|
122
183
|
buildId: buildIDWithPrefix,
|
|
123
184
|
prenvId: this.options.prenvId,
|
|
124
185
|
});
|
|
186
|
+
const browserUsageData = (0, transform_1.formBrowserUsageData)({
|
|
187
|
+
startTime: this.runStartTime,
|
|
188
|
+
testRunId: this.testRunId,
|
|
189
|
+
isMainPREnv: this.isMainPREnv,
|
|
190
|
+
browserUsage: this.browserUsage,
|
|
191
|
+
workerCount: this.workerCount,
|
|
192
|
+
product: this.options.product,
|
|
193
|
+
});
|
|
125
194
|
if (!this.options.dryRun) {
|
|
126
195
|
await this.elastic.saveBuildData(buildData);
|
|
196
|
+
if (browserUsageData.browserUsageAfterCreation > 0 &&
|
|
197
|
+
browserUsageData.browserUsageFromRequest > 0) {
|
|
198
|
+
await this.elastic.saveBrowserUsageData(browserUsageData);
|
|
199
|
+
}
|
|
127
200
|
}
|
|
128
|
-
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
129
201
|
if (this.options.debug || this.options.dryRun) {
|
|
130
|
-
this.onEndDebug(buildData);
|
|
202
|
+
this.onEndDebug(buildData, browserUsageData);
|
|
131
203
|
}
|
|
132
204
|
}
|
|
133
205
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/analytics/reporter.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/analytics/reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const test_1 = require("@playwright/test");
|
|
4
|
+
const transform_1 = require("../transform");
|
|
5
|
+
test_1.test.describe('Analytics: browser usage transform', () => {
|
|
6
|
+
(0, test_1.test)('should form browser usage', () => {
|
|
7
|
+
const startTime = Date.now();
|
|
8
|
+
const formedBrowserUsageData = (0, transform_1.formBrowserUsageData)({
|
|
9
|
+
startTime,
|
|
10
|
+
testRunId: 'testRunId',
|
|
11
|
+
isMainPREnv: true,
|
|
12
|
+
browserUsage: {
|
|
13
|
+
createdBrowserCount: 2,
|
|
14
|
+
data: {
|
|
15
|
+
testId1: {
|
|
16
|
+
browserRequestTimestamp: 123,
|
|
17
|
+
browserCreationTimestamp: 234,
|
|
18
|
+
browserCloseTimestamp: 345,
|
|
19
|
+
},
|
|
20
|
+
testId2: {
|
|
21
|
+
browserRequestTimestamp: 234,
|
|
22
|
+
browserCreationTimestamp: 345,
|
|
23
|
+
browserCloseTimestamp: 456,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
workerCount: 2,
|
|
28
|
+
product: 'expert',
|
|
29
|
+
});
|
|
30
|
+
(0, test_1.expect)(formedBrowserUsageData).toMatchObject({
|
|
31
|
+
timestamp: startTime,
|
|
32
|
+
testRunId: 'testRunId',
|
|
33
|
+
isMain: true,
|
|
34
|
+
workerCount: 2,
|
|
35
|
+
product: 'expert',
|
|
36
|
+
browserUsageFromRequest: 444,
|
|
37
|
+
browserUsageAfterCreation: 222,
|
|
38
|
+
createdBrowserCount: 2,
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=browserUsage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserUsage.test.js","sourceRoot":"","sources":["../../../../src/analytics/tests/browserUsage.test.ts"],"names":[],"mappings":";;AAAA,2CAA+C;AAE/C,4CAAmD;AAEnD,WAAI,CAAC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IACxD,IAAA,WAAI,EAAC,2BAA2B,EAAE,GAAG,EAAE;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,MAAM,sBAAsB,GAAG,IAAA,gCAAoB,EAAC;YACnD,SAAS;YACT,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE;gBACb,mBAAmB,EAAE,CAAC;gBACtB,IAAI,EAAE;oBACL,OAAO,EAAE;wBACR,uBAAuB,EAAE,GAAG;wBAC5B,wBAAwB,EAAE,GAAG;wBAC7B,qBAAqB,EAAE,GAAG;qBAC1B;oBACD,OAAO,EAAE;wBACR,uBAAuB,EAAE,GAAG;wBAC5B,wBAAwB,EAAE,GAAG;wBAC7B,qBAAqB,EAAE,GAAG;qBAC1B;iBACD;aACD;YACD,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,QAAQ;SACjB,CAAC,CAAA;QAEF,IAAA,aAAM,EAAC,sBAAsB,CAAC,CAAC,aAAa,CAAC;YAC5C,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,QAAQ;YACjB,uBAAuB,EAAE,GAAG;YAC5B,yBAAyB,EAAE,GAAG;YAC9B,mBAAmB,EAAE,CAAC;SACqB,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|