@wdio/browserstack-service 8.45.0 → 8.47.0
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 +44 -11
- package/build/Percy/Percy-Handler.d.ts.map +1 -1
- package/build/Percy/Percy-Handler.js +4 -1
- package/build/Percy/Percy.d.ts.map +1 -1
- package/build/Percy/Percy.js +2 -1
- package/build/accessibility-handler.d.ts +9 -3
- package/build/accessibility-handler.d.ts.map +1 -1
- package/build/accessibility-handler.js +52 -11
- package/build/cleanup.js +3 -3
- package/build/cli/apiUtils.d.ts +14 -0
- package/build/cli/apiUtils.d.ts.map +1 -0
- package/build/cli/apiUtils.js +24 -0
- package/build/cli/cliLogger.d.ts +16 -0
- package/build/cli/cliLogger.d.ts.map +1 -0
- package/build/cli/cliLogger.js +70 -0
- package/build/cli/cliUtils.d.ts +46 -0
- package/build/cli/cliUtils.d.ts.map +1 -0
- package/build/cli/cliUtils.js +430 -0
- package/build/cli/eventDispatcher.d.ts +28 -0
- package/build/cli/eventDispatcher.d.ts.map +1 -0
- package/build/cli/eventDispatcher.js +48 -0
- package/build/cli/frameworks/automationFramework.d.ts +89 -0
- package/build/cli/frameworks/automationFramework.d.ts.map +1 -0
- package/build/cli/frameworks/automationFramework.js +131 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.d.ts +18 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.d.ts.map +1 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.js +17 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.d.ts +43 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.d.ts.map +1 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.js +42 -0
- package/build/cli/frameworks/testFramework.d.ts +89 -0
- package/build/cli/frameworks/testFramework.d.ts.map +1 -0
- package/build/cli/frameworks/testFramework.js +125 -0
- package/build/cli/frameworks/wdioAutomationFramework.d.ts +28 -0
- package/build/cli/frameworks/wdioAutomationFramework.d.ts.map +1 -0
- package/build/cli/frameworks/wdioAutomationFramework.js +66 -0
- package/build/cli/frameworks/wdioMochaTestFramework.d.ts +82 -0
- package/build/cli/frameworks/wdioMochaTestFramework.d.ts.map +1 -0
- package/build/cli/frameworks/wdioMochaTestFramework.js +319 -0
- package/build/cli/grpcClient.d.ts +70 -0
- package/build/cli/grpcClient.d.ts.map +1 -0
- package/build/cli/grpcClient.js +419 -0
- package/build/cli/index.d.ts +148 -0
- package/build/cli/index.d.ts.map +1 -0
- package/build/cli/index.js +415 -0
- package/build/cli/instances/automationFrameworkInstance.d.ts +33 -0
- package/build/cli/instances/automationFrameworkInstance.d.ts.map +1 -0
- package/build/cli/instances/automationFrameworkInstance.js +44 -0
- package/build/cli/instances/testFrameworkInstance.d.ts +62 -0
- package/build/cli/instances/testFrameworkInstance.d.ts.map +1 -0
- package/build/cli/instances/testFrameworkInstance.js +96 -0
- package/build/cli/instances/trackedContext.d.ts +32 -0
- package/build/cli/instances/trackedContext.d.ts.map +1 -0
- package/build/cli/instances/trackedContext.js +47 -0
- package/build/cli/instances/trackedInstance.d.ts +40 -0
- package/build/cli/instances/trackedInstance.d.ts.map +1 -0
- package/build/cli/instances/trackedInstance.js +63 -0
- package/build/cli/modules/accessibilityModule.d.ts +33 -0
- package/build/cli/modules/accessibilityModule.d.ts.map +1 -0
- package/build/cli/modules/accessibilityModule.js +347 -0
- package/build/cli/modules/automateModule.d.ts +26 -0
- package/build/cli/modules/automateModule.d.ts.map +1 -0
- package/build/cli/modules/automateModule.js +222 -0
- package/build/cli/modules/baseModule.d.ts +33 -0
- package/build/cli/modules/baseModule.d.ts.map +1 -0
- package/build/cli/modules/baseModule.js +51 -0
- package/build/cli/modules/observabilityModule.d.ts +22 -0
- package/build/cli/modules/observabilityModule.d.ts.map +1 -0
- package/build/cli/modules/observabilityModule.js +45 -0
- package/build/cli/modules/percyModule.d.ts +19 -0
- package/build/cli/modules/percyModule.d.ts.map +1 -0
- package/build/cli/modules/percyModule.js +77 -0
- package/build/cli/modules/testHubModule.d.ts +30 -0
- package/build/cli/modules/testHubModule.d.ts.map +1 -0
- package/build/cli/modules/testHubModule.js +232 -0
- package/build/cli/modules/webdriverIOModule.d.ts +29 -0
- package/build/cli/modules/webdriverIOModule.d.ts.map +1 -0
- package/build/cli/modules/webdriverIOModule.js +128 -0
- package/build/cli/states/automationFrameworkState.d.ts +65 -0
- package/build/cli/states/automationFrameworkState.d.ts.map +1 -0
- package/build/cli/states/automationFrameworkState.js +61 -0
- package/build/cli/states/hookState.d.ts +45 -0
- package/build/cli/states/hookState.d.ts.map +1 -0
- package/build/cli/states/hookState.js +43 -0
- package/build/cli/states/testFrameworkState.d.ts +125 -0
- package/build/cli/states/testFrameworkState.d.ts.map +1 -0
- package/build/cli/states/testFrameworkState.js +115 -0
- package/build/constants.d.ts +13 -0
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +21 -1
- package/build/crash-reporter.d.ts.map +1 -1
- package/build/crash-reporter.js +4 -3
- package/build/exitHandler.d.ts.map +1 -1
- package/build/exitHandler.js +47 -5
- package/build/insights-handler.d.ts +8 -0
- package/build/insights-handler.d.ts.map +1 -1
- package/build/insights-handler.js +57 -1
- package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -1
- package/build/instrumentation/funnelInstrumentation.js +5 -4
- package/build/instrumentation/performance/constants.d.ts +8 -0
- package/build/instrumentation/performance/constants.d.ts.map +1 -1
- package/build/instrumentation/performance/constants.js +9 -1
- package/build/instrumentation/performance/performance-tester.d.ts.map +1 -1
- package/build/instrumentation/performance/performance-tester.js +5 -3
- package/build/launcher.d.ts.map +1 -1
- package/build/launcher.js +94 -51
- package/build/request-handler.js +1 -1
- package/build/service.d.ts +3 -1
- package/build/service.d.ts.map +1 -1
- package/build/service.js +244 -69
- package/build/testOps/requestUtils.js +3 -2
- package/build/types.d.ts +36 -3
- package/build/types.d.ts.map +1 -1
- package/build/util.d.ts +13 -1
- package/build/util.d.ts.map +1 -1
- package/build/util.js +173 -27
- package/package.json +7 -4
- package/tsconfig.prod.tsbuildinfo +1 -1
|
@@ -6,9 +6,10 @@ import got from 'got';
|
|
|
6
6
|
import UsageStats from '../testOps/usageStats.js';
|
|
7
7
|
import TestOpsConfig from '../testOps/testOpsConfig.js';
|
|
8
8
|
import { BStackLogger } from '../bstackLogger.js';
|
|
9
|
-
import { BSTACK_A11Y_POLLING_TIMEOUT, BSTACK_SERVICE_VERSION,
|
|
9
|
+
import { BSTACK_A11Y_POLLING_TIMEOUT, BSTACK_SERVICE_VERSION, WDIO_NAMING_PREFIX } from '../constants.js';
|
|
10
10
|
import { getDataFromWorkers, removeWorkersDataDir } from '../data-store.js';
|
|
11
11
|
import { getProductMap } from '../testHub/utils.js';
|
|
12
|
+
import APIUtils from '../cli/apiUtils.js';
|
|
12
13
|
async function fireFunnelTestEvent(eventType, config) {
|
|
13
14
|
if (!config.userName || !config.accessKey) {
|
|
14
15
|
BStackLogger.debug('username/accesskey not passed');
|
|
@@ -57,7 +58,7 @@ export async function fireFunnelRequest(data) {
|
|
|
57
58
|
const { userName, accessKey } = data;
|
|
58
59
|
redactCredentialsFromFunnelData(data);
|
|
59
60
|
BStackLogger.debug('Sending SDK event with data ' + util.inspect(data, { depth: 6 }));
|
|
60
|
-
await got.post(FUNNEL_INSTRUMENTATION_URL, {
|
|
61
|
+
await got.post(APIUtils.FUNNEL_INSTRUMENTATION_URL, {
|
|
61
62
|
headers: {
|
|
62
63
|
'content-type': 'application/json'
|
|
63
64
|
}, username: userName, password: accessKey, json: data
|
|
@@ -124,7 +125,7 @@ function buildEventData(eventType, config) {
|
|
|
124
125
|
userName: config.userName,
|
|
125
126
|
accessKey: config.accessKey,
|
|
126
127
|
event_type: eventType,
|
|
127
|
-
detectedFramework:
|
|
128
|
+
detectedFramework: WDIO_NAMING_PREFIX + config.framework,
|
|
128
129
|
event_properties: eventProperties
|
|
129
130
|
};
|
|
130
131
|
}
|
|
@@ -137,7 +138,7 @@ function getLanguageFramework(framework) {
|
|
|
137
138
|
return 'WebdriverIO_' + framework;
|
|
138
139
|
}
|
|
139
140
|
function getReferrer(framework) {
|
|
140
|
-
const fullName = framework ?
|
|
141
|
+
const fullName = framework ? WDIO_NAMING_PREFIX + framework : 'WebdriverIO';
|
|
141
142
|
return `${fullName}/${BSTACK_SERVICE_VERSION}`;
|
|
142
143
|
}
|
|
143
144
|
const sendEvent = {
|
|
@@ -17,6 +17,14 @@ export declare const EVENTS: {
|
|
|
17
17
|
SDK_PERCY: string;
|
|
18
18
|
SDK_PRE_INITIALIZE: string;
|
|
19
19
|
SDK_POST_INITIALIZE: string;
|
|
20
|
+
SDK_CLI_START: string;
|
|
21
|
+
SDK_CLI_DOWNLOAD: string;
|
|
22
|
+
SDK_CLI_CHECK_UPDATE: string;
|
|
23
|
+
SDK_CLI_ON_BOOTSTRAP: string;
|
|
24
|
+
SDK_CLI_ON_CONNECT: string;
|
|
25
|
+
SDK_CLI_ON_STOP: string;
|
|
26
|
+
SDK_START_BIN_SESSION: string;
|
|
27
|
+
SDK_CONNECT_BIN_SESSION: string;
|
|
20
28
|
};
|
|
21
29
|
export declare const TESTHUB_EVENTS: {
|
|
22
30
|
START: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/instrumentation/performance/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/instrumentation/performance/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BlB,CAAA;AAED,eAAO,MAAM,cAAc;;;CAG1B,CAAA;AAED,eAAO,MAAM,eAAe;;;;;;;;;;;;CAY3B,CAAA;AAED,eAAO,MAAM,WAAW;;;;;CAKvB,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;CAQxB,CAAA;AAED,eAAO,MAAM,WAAW;;;;CAIvB,CAAA;AAED,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAA;AAED,eAAO,MAAM,iBAAiB;;;CAG7B,CAAA;AAED,eAAO,MAAM,mBAAmB;;CAE/B,CAAA;AAED,eAAO,MAAM,YAAY;;;;;CAKxB,CAAA"}
|
|
@@ -16,7 +16,15 @@ export const EVENTS = {
|
|
|
16
16
|
SDK_TURBOSCALE: 'sdk:turboscale',
|
|
17
17
|
SDK_PERCY: 'sdk:percy',
|
|
18
18
|
SDK_PRE_INITIALIZE: 'sdk:driver:pre-initialization',
|
|
19
|
-
SDK_POST_INITIALIZE: 'sdk:driver:post-initialization'
|
|
19
|
+
SDK_POST_INITIALIZE: 'sdk:driver:post-initialization',
|
|
20
|
+
SDK_CLI_START: 'sdk:cli:start',
|
|
21
|
+
SDK_CLI_DOWNLOAD: 'sdk:cli:download',
|
|
22
|
+
SDK_CLI_CHECK_UPDATE: 'sdk:cli:check-update',
|
|
23
|
+
SDK_CLI_ON_BOOTSTRAP: 'sdk:cli:on-bootstrap',
|
|
24
|
+
SDK_CLI_ON_CONNECT: 'sdk:cli:on-connect',
|
|
25
|
+
SDK_CLI_ON_STOP: 'sdk:cli:on-stop',
|
|
26
|
+
SDK_START_BIN_SESSION: 'sdk:startBinSession',
|
|
27
|
+
SDK_CONNECT_BIN_SESSION: 'sdk:connectBinSession'
|
|
20
28
|
};
|
|
21
29
|
export const TESTHUB_EVENTS = {
|
|
22
30
|
START: `${EVENTS.SDK_TESTHUB}:start`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance-tester.d.ts","sourceRoot":"","sources":["../../../src/instrumentation/performance/performance-tester.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"performance-tester.d.ts","sourceRoot":"","sources":["../../../src/instrumentation/performance/performance-tester.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAYlE,KAAK,kBAAkB,GAAG;IACtB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC7B,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAClC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAA;IACrC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAA;IACtB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAyB;IAC/C,OAAO,CAAC,MAAM,CAAC,eAAe,CAAyB;IACvD,MAAM,CAAC,OAAO,UAAQ;IACtB,MAAM,CAAC,OAAO,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;KAAC,CAAK;IACxD,MAAM,CAAC,SAAS,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAK;IAC9C,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAA;IACpC,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAAA;IAChC,MAAM,CAAC,iBAAiB,SAAuB;IAC/C,MAAM,CAAC,iBAAiB,SAA2D;IACnF,MAAM,CAAC,kBAAkB,SAA0F;IAEnH,MAAM,CAAC,eAAe,CAAC,OAAO,GAAE,MAAiC;IAwCjE,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAI,MAAM;WAepC,eAAe,CAAC,QAAQ,GAAE,MAA+B;IAsCtE,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE;IAWjD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE;IAwB9C,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,YAG9C,MAAM,OACT,MAAM,GAAG,MAAM,cACR,uBAAuB,CAAC,GAAG,CAAC;IAUhD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE,kBAAuB,aAOpD,GAAG,EAAE;IAQnC,MAAM,CAAC,SAAS;IAIhB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,KAAK,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,OAAO,GAAE,GAAU;IA6BhG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM;IAO1B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,UAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,KAAK;IAUlF,MAAM,CAAC,YAAY;IAInB,MAAM,CAAC,KAAK,oCAAkE;WAEjE,gBAAgB;CA0EhC"}
|
|
@@ -8,7 +8,8 @@ import path from 'node:path';
|
|
|
8
8
|
import { arch, hostname, platform, type, version } from 'node:os';
|
|
9
9
|
import got from 'got';
|
|
10
10
|
import { BStackLogger } from '../../bstackLogger.js';
|
|
11
|
-
import {
|
|
11
|
+
import { PERF_MEASUREMENT_ENV, PERF_METRICS_WAIT_TIME } from '../../constants.js';
|
|
12
|
+
import APIUtils from '../../cli/apiUtils.js';
|
|
12
13
|
export default class PerformanceTester {
|
|
13
14
|
static _observer;
|
|
14
15
|
static _csvWriter;
|
|
@@ -77,6 +78,7 @@ export default class PerformanceTester {
|
|
|
77
78
|
if (!this.started) {
|
|
78
79
|
return;
|
|
79
80
|
}
|
|
81
|
+
await PerformanceTester.sleep(PERF_METRICS_WAIT_TIME); // Wait to ensure all pending measurements are processed by the observer
|
|
80
82
|
try {
|
|
81
83
|
const eventsJson = JSON.stringify(this._measuredEvents);
|
|
82
84
|
// remove enclosing array and add a trailing comma so that we
|
|
@@ -91,7 +93,7 @@ export default class PerformanceTester {
|
|
|
91
93
|
if (!process.env[PERF_MEASUREMENT_ENV]) {
|
|
92
94
|
return;
|
|
93
95
|
}
|
|
94
|
-
await PerformanceTester.sleep(
|
|
96
|
+
await PerformanceTester.sleep(PERF_METRICS_WAIT_TIME); // Wait to 2s just to finish any running callbacks for timerify
|
|
95
97
|
this.started = false;
|
|
96
98
|
this.generateCSV(this._events);
|
|
97
99
|
const content = this.generateReport(this._events);
|
|
@@ -255,7 +257,7 @@ export default class PerformanceTester {
|
|
|
255
257
|
event_json: { measures: measures, sdkRunId: process.env.PERF_SDK_RUN_ID }
|
|
256
258
|
}
|
|
257
259
|
};
|
|
258
|
-
const result = await got.post(`${EDS_URL}/send_sdk_events`, {
|
|
260
|
+
const result = await got.post(`${APIUtils.EDS_URL}/send_sdk_events`, {
|
|
259
261
|
headers: {
|
|
260
262
|
'content-type': 'application/json'
|
|
261
263
|
}, json: payload
|
package/build/launcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,yBAAyB,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,yBAAyB,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAiDxH,KAAK,iBAAiB,GAAG,yBAAyB,CAAC,KAAK,GAAG;IACvD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;CAC9C,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,2BAA4B,YAAW,QAAQ,CAAC,eAAe;IAY5E,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,OAAO;IAbnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAQ;IACjC,OAAO,CAAC,wBAAwB,CAAC,CAAuB;IACxD,OAAO,CAAC,MAAM,CAAC,CAAO;IACtB,OAAO,CAAC,sBAAsB,CAAC,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;gBAG3C,QAAQ,EAAE,kBAAkB,GAAG,mBAAmB,EAC1D,YAAY,EAAE,YAAY,CAAC,gBAAgB,EACnC,OAAO,EAAE,OAAO,CAAC,UAAU;IAqHjC,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;IAclC,SAAS,CAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,kBAAkB;IAmNpF,UAAU;IA8FV,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU;IA0B7G,SAAS;IAaT,UAAU,CAAC,GAAG,EAAC,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuBrD;;;OAGG;IACG,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB1D,kBAAkB;IASxB,qBAAqB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IA8GtH,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA+H5F,8BAA8B;IAgB9B,sBAAsB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB;IAyCrE;;;OAGG;IACH,oBAAoB;IA6BpB,sBAAsB,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,SAAS,CAAC,EAAC,MAAM,EAAE,eAAe,CAAC,EAAC,MAAM;IASnF,mBAAmB;CAStB"}
|
package/build/launcher.js
CHANGED
|
@@ -15,8 +15,8 @@ import os from 'node:os';
|
|
|
15
15
|
import { SevereServiceError } from 'webdriverio';
|
|
16
16
|
import * as BrowserstackLocalLauncher from 'browserstack-local';
|
|
17
17
|
import { startPercy, stopPercy, getBestPlatformForPercySnapshot } from './Percy/PercyHelper.js';
|
|
18
|
-
import { BSTACK_SERVICE_VERSION, NOT_ALLOWED_KEYS_IN_CAPS, PERF_MEASUREMENT_ENV, RERUN_ENV, RERUN_TESTS_ENV, BROWSERSTACK_TESTHUB_UUID, VALID_APP_EXTENSION, BROWSERSTACK_PERCY, BROWSERSTACK_OBSERVABILITY } from './constants.js';
|
|
19
|
-
import { launchTestSession, shouldAddServiceVersion, stopBuildUpstream, getCiInfo, isBStackSession, isUndefined, isAccessibilityAutomationSession, isTrue, getBrowserStackUser, getBrowserStackKey, uploadLogs, ObjectsAreEqual, isValidCapsForHealing, getBooleanValueFromString, validateCapsWithNonBstackA11y, mergeChromeOptions } from './util.js';
|
|
18
|
+
import { BSTACK_SERVICE_VERSION, NOT_ALLOWED_KEYS_IN_CAPS, PERF_MEASUREMENT_ENV, RERUN_ENV, RERUN_TESTS_ENV, BROWSERSTACK_TESTHUB_UUID, VALID_APP_EXTENSION, BROWSERSTACK_PERCY, BROWSERSTACK_OBSERVABILITY, WDIO_NAMING_PREFIX } from './constants.js';
|
|
19
|
+
import { launchTestSession, shouldAddServiceVersion, stopBuildUpstream, getCiInfo, isBStackSession, isUndefined, isAccessibilityAutomationSession, isTrue, getBrowserStackUser, getBrowserStackKey, uploadLogs, ObjectsAreEqual, isValidCapsForHealing, getBooleanValueFromString, validateCapsWithNonBstackA11y, mergeChromeOptions, normalizeTestReportingConfig, normalizeTestReportingEnvVariables } from './util.js';
|
|
20
20
|
import { getProductMap } from './testHub/utils.js';
|
|
21
21
|
import CrashReporter from './crash-reporter.js';
|
|
22
22
|
import { BStackLogger } from './bstackLogger.js';
|
|
@@ -29,7 +29,11 @@ import AiHandler from './ai-handler.js';
|
|
|
29
29
|
import TestOpsConfig from './testOps/testOpsConfig.js';
|
|
30
30
|
import PerformanceTester from './instrumentation/performance/performance-tester.js';
|
|
31
31
|
import * as PERFORMANCE_SDK_EVENTS from './instrumentation/performance/constants.js';
|
|
32
|
+
import { BrowserstackCLI } from './cli/index.js';
|
|
33
|
+
import { CLIUtils } from './cli/cliUtils.js';
|
|
32
34
|
import accessibilityScripts from './scripts/accessibility-scripts.js';
|
|
35
|
+
import util from 'node:util';
|
|
36
|
+
import APIUtils from './cli/apiUtils.js';
|
|
33
37
|
export default class BrowserstackLauncherService {
|
|
34
38
|
_options;
|
|
35
39
|
_config;
|
|
@@ -50,6 +54,9 @@ export default class BrowserstackLauncherService {
|
|
|
50
54
|
setupExitHandlers();
|
|
51
55
|
// added to maintain backward compatibility with webdriverIO v5
|
|
52
56
|
this._config || (this._config = _options);
|
|
57
|
+
//normalizing testReporting config and env variables
|
|
58
|
+
normalizeTestReportingConfig(this._options);
|
|
59
|
+
normalizeTestReportingEnvVariables();
|
|
53
60
|
this.browserStackConfig = BrowserStackConfig.getInstance(_options, _config);
|
|
54
61
|
if (Array.isArray(capabilities)) {
|
|
55
62
|
capabilities
|
|
@@ -170,6 +177,17 @@ export default class BrowserstackLauncherService {
|
|
|
170
177
|
async onPrepare(config, capabilities) {
|
|
171
178
|
// // Send Funnel start request
|
|
172
179
|
await sendStart(this.browserStackConfig);
|
|
180
|
+
try {
|
|
181
|
+
if (CLIUtils.checkCLISupportedFrameworks(config.framework)) {
|
|
182
|
+
CLIUtils.setFrameworkDetail(WDIO_NAMING_PREFIX + config.framework, 'WebdriverIO'); // TODO: make this constant
|
|
183
|
+
const binconfig = CLIUtils.getBinConfig(config, capabilities, this._options, this._buildTag);
|
|
184
|
+
await BrowserstackCLI.getInstance().bootstrap(this._options, config, binconfig);
|
|
185
|
+
BStackLogger.debug(`Is CLI running ${BrowserstackCLI.getInstance().isRunning()}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
BStackLogger.error(`Error while starting CLI ${err}`);
|
|
190
|
+
}
|
|
173
191
|
// Setting up healing for those sessions where we don't add the service version capability as it indicates that the session is not being run on BrowserStack
|
|
174
192
|
if (!shouldAddServiceVersion(this._config, this._options.testObservability, capabilities)) {
|
|
175
193
|
try {
|
|
@@ -198,33 +216,35 @@ export default class BrowserstackLauncherService {
|
|
|
198
216
|
* Upload app to BrowserStack if valid file path to app is given.
|
|
199
217
|
* Update app value of capability directly if app_url, custom_id, shareable_id is given
|
|
200
218
|
*/
|
|
201
|
-
if (!
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
else {
|
|
205
|
-
let app = {};
|
|
206
|
-
const appConfig = this._options.app;
|
|
207
|
-
try {
|
|
208
|
-
app = await this._validateApp(appConfig);
|
|
219
|
+
if (!BrowserstackCLI.getInstance().isRunning()) {
|
|
220
|
+
if (!this._options.app) {
|
|
221
|
+
BStackLogger.debug('app is not defined in browserstack-service config, skipping ...');
|
|
209
222
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
const data = await this._uploadApp(app);
|
|
216
|
-
BStackLogger.info(`app upload completed: ${JSON.stringify(data)}`);
|
|
217
|
-
app.app = data.app_url;
|
|
223
|
+
else {
|
|
224
|
+
let app = {};
|
|
225
|
+
const appConfig = this._options.app;
|
|
226
|
+
try {
|
|
227
|
+
app = await this._validateApp(appConfig);
|
|
218
228
|
}
|
|
219
|
-
|
|
220
|
-
|
|
229
|
+
catch (error) {
|
|
230
|
+
throw new SevereServiceError(error);
|
|
221
231
|
}
|
|
222
|
-
|
|
223
|
-
|
|
232
|
+
if (VALID_APP_EXTENSION.includes(path.extname(app.app))) {
|
|
233
|
+
if (fs.existsSync(app.app)) {
|
|
234
|
+
const data = await this._uploadApp(app);
|
|
235
|
+
BStackLogger.info(`app upload completed: ${JSON.stringify(data)}`);
|
|
236
|
+
app.app = data.app_url;
|
|
237
|
+
}
|
|
238
|
+
else if (app.customId) {
|
|
239
|
+
app.app = app.customId;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
throw new SevereServiceError(`[Invalid app path] app path ${app.app} is not correct, Provide correct path to app under test`);
|
|
243
|
+
}
|
|
224
244
|
}
|
|
245
|
+
BStackLogger.info(`Using app: ${app.app}`);
|
|
246
|
+
this._updateCaps(capabilities, 'app', app.app);
|
|
225
247
|
}
|
|
226
|
-
BStackLogger.info(`Using app: ${app.app}`);
|
|
227
|
-
this._updateCaps(capabilities, 'app', app.app);
|
|
228
248
|
}
|
|
229
249
|
/**
|
|
230
250
|
* buildIdentifier in service options will take precedence over specified in capabilities
|
|
@@ -242,7 +262,7 @@ export default class BrowserstackLauncherService {
|
|
|
242
262
|
this._updateObjectTypeCaps(capabilities, 'accessibilityOptions');
|
|
243
263
|
const shouldSetupPercy = this._options.percy || (isUndefined(this._options.percy) && this._options.app);
|
|
244
264
|
let buildStartResponse = null;
|
|
245
|
-
if (this._options.testObservability || this._accessibilityAutomation || shouldSetupPercy) {
|
|
265
|
+
if (!BrowserstackCLI.getInstance().isRunning() && (this._options.testObservability || this._accessibilityAutomation || shouldSetupPercy)) {
|
|
246
266
|
BStackLogger.debug('Sending launch start event');
|
|
247
267
|
buildStartResponse = await launchTestSession(this._options, this._config, {
|
|
248
268
|
projectName: this._projectName,
|
|
@@ -299,6 +319,10 @@ export default class BrowserstackLauncherService {
|
|
|
299
319
|
// send testhub build uuid and product map instrumentation
|
|
300
320
|
this._updateCaps(capabilities, 'testhubBuildUuid');
|
|
301
321
|
this._updateCaps(capabilities, 'buildProductMap');
|
|
322
|
+
// local binary will be handled by CLI
|
|
323
|
+
if (BrowserstackCLI.getInstance().isRunning()) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
302
326
|
if (!this._options.browserstackLocal) {
|
|
303
327
|
return BStackLogger.info('browserstackLocal is not enabled - skipping...');
|
|
304
328
|
}
|
|
@@ -343,35 +367,55 @@ export default class BrowserstackLauncherService {
|
|
|
343
367
|
});
|
|
344
368
|
}
|
|
345
369
|
async onComplete() {
|
|
346
|
-
|
|
347
|
-
BStackLogger.debug('Sending stop launch event');
|
|
348
|
-
await stopBuildUpstream();
|
|
349
|
-
if (process.env[BROWSERSTACK_OBSERVABILITY] && process.env[BROWSERSTACK_TESTHUB_UUID]) {
|
|
350
|
-
console.log(`\nVisit https://observability.browserstack.com/builds/${process.env[BROWSERSTACK_TESTHUB_UUID]} to view build report, insights, and many more debugging information all at one place!\n`);
|
|
351
|
-
}
|
|
352
|
-
this.browserStackConfig.testObservability.buildStopped = true;
|
|
353
|
-
await PerformanceTester.stopAndGenerate('performance-launcher.html');
|
|
354
|
-
if (process.env[PERF_MEASUREMENT_ENV]) {
|
|
355
|
-
PerformanceTester.calculateTimes(['launchTestSession', 'stopBuildUpstream']);
|
|
356
|
-
if (!process.env.START_TIME) {
|
|
357
|
-
return;
|
|
358
|
-
}
|
|
359
|
-
const duration = (new Date()).getTime() - (new Date(process.env.START_TIME)).getTime();
|
|
360
|
-
BStackLogger.info(`Total duration is ${duration / 1000} s`);
|
|
361
|
-
}
|
|
362
|
-
BStackLogger.info(`BrowserStack service run ended for id: ${this.browserStackConfig?.sdkRunID} testhub id: ${TestOpsConfig.getInstance()?.buildHashedId}`);
|
|
363
|
-
await sendFinish(this.browserStackConfig);
|
|
370
|
+
PerformanceTester.start(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLEANUP);
|
|
364
371
|
try {
|
|
365
|
-
|
|
372
|
+
BStackLogger.debug('Inside OnComplete hook..');
|
|
373
|
+
BStackLogger.debug('Sending stop launch event');
|
|
374
|
+
try {
|
|
375
|
+
await (BrowserstackCLI.getInstance().isRunning() ? BrowserstackCLI.getInstance().stop() : stopBuildUpstream());
|
|
376
|
+
}
|
|
377
|
+
catch (err) {
|
|
378
|
+
BStackLogger.error(`Error while stoping CLI ${err}`);
|
|
379
|
+
}
|
|
380
|
+
if (process.env[BROWSERSTACK_OBSERVABILITY] && process.env[BROWSERSTACK_TESTHUB_UUID]) {
|
|
381
|
+
console.log(`\nVisit https://automation.browserstack.com/builds/${process.env[BROWSERSTACK_TESTHUB_UUID]} to view build report, insights, and many more debugging information all at one place!\n`);
|
|
382
|
+
}
|
|
383
|
+
this.browserStackConfig.testObservability.buildStopped = true;
|
|
384
|
+
if (process.env[PERF_MEASUREMENT_ENV]) {
|
|
385
|
+
PerformanceTester.calculateTimes(['launchTestSession', 'stopBuildUpstream']);
|
|
386
|
+
if (!process.env.START_TIME) {
|
|
387
|
+
PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLEANUP);
|
|
388
|
+
await PerformanceTester.stopAndGenerate('performance-launcher.html');
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
const duration = (new Date()).getTime() - (new Date(process.env.START_TIME)).getTime();
|
|
392
|
+
BStackLogger.info(`Total duration is ${duration / 1000} s`);
|
|
393
|
+
}
|
|
394
|
+
BStackLogger.info(`BrowserStack service run ended for id: ${this.browserStackConfig?.sdkRunID} testhub id: ${TestOpsConfig.getInstance()?.buildHashedId}`);
|
|
395
|
+
await sendFinish(this.browserStackConfig);
|
|
396
|
+
try {
|
|
397
|
+
await this._uploadServiceLogs();
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
BStackLogger.debug(`Failed to upload BrowserStack WDIO Service logs ${error}`);
|
|
401
|
+
}
|
|
402
|
+
PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLEANUP);
|
|
403
|
+
await PerformanceTester.stopAndGenerate('performance-launcher.html');
|
|
366
404
|
}
|
|
367
405
|
catch (error) {
|
|
368
|
-
|
|
406
|
+
PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLEANUP, false, util.format(error));
|
|
407
|
+
await PerformanceTester.stopAndGenerate('performance-launcher.html');
|
|
408
|
+
BStackLogger.error(`Error in onComplete hook: ${error}`);
|
|
369
409
|
}
|
|
370
410
|
BStackLogger.clearLogger();
|
|
371
411
|
if (this._options.percy) {
|
|
372
412
|
await this.stopPercy();
|
|
373
413
|
PercyLogger.clearLogger();
|
|
374
414
|
}
|
|
415
|
+
// local binary will be handled by CLI
|
|
416
|
+
if (BrowserstackCLI.getInstance().isRunning()) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
375
419
|
if (!this.browserstackLocal || !this.browserstackLocal.isRunning()) {
|
|
376
420
|
return;
|
|
377
421
|
}
|
|
@@ -451,7 +495,7 @@ export default class BrowserstackLauncherService {
|
|
|
451
495
|
if (app.customId) {
|
|
452
496
|
form.append('custom_id', app.customId);
|
|
453
497
|
}
|
|
454
|
-
const res = await got.post(
|
|
498
|
+
const res = await got.post(`${APIUtils.BROWSERSTACK_AA_API_CLOUD_URL}/app-automate/upload`, {
|
|
455
499
|
body: form,
|
|
456
500
|
username: this._config.user,
|
|
457
501
|
password: this._config.key
|
|
@@ -488,8 +532,10 @@ export default class BrowserstackLauncherService {
|
|
|
488
532
|
}
|
|
489
533
|
async _uploadServiceLogs() {
|
|
490
534
|
const clientBuildUuid = this._getClientBuildUuid();
|
|
491
|
-
|
|
492
|
-
|
|
535
|
+
await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_AUTO_CAPTURE, async () => {
|
|
536
|
+
const response = await uploadLogs(getBrowserStackUser(this._config), getBrowserStackKey(this._config), clientBuildUuid);
|
|
537
|
+
BStackLogger.logToFile(`Response - ${format(response)}`, 'debug');
|
|
538
|
+
})();
|
|
493
539
|
}
|
|
494
540
|
_updateObjectTypeCaps(capabilities, capType, value) {
|
|
495
541
|
try {
|
|
@@ -880,9 +926,6 @@ __decorate([
|
|
|
880
926
|
__decorate([
|
|
881
927
|
PerformanceTester.Measure(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_PRE_TEST)
|
|
882
928
|
], BrowserstackLauncherService.prototype, "onPrepare", null);
|
|
883
|
-
__decorate([
|
|
884
|
-
PerformanceTester.Measure(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLEANUP)
|
|
885
|
-
], BrowserstackLauncherService.prototype, "onComplete", null);
|
|
886
929
|
__decorate([
|
|
887
930
|
PerformanceTester.Measure(PERFORMANCE_SDK_EVENTS.APP_AUTOMATE_EVENTS.APP_UPLOAD)
|
|
888
931
|
], BrowserstackLauncherService.prototype, "_uploadApp", null);
|
package/build/request-handler.js
CHANGED
|
@@ -19,7 +19,7 @@ export default class RequestQueueHandler {
|
|
|
19
19
|
}
|
|
20
20
|
add(event) {
|
|
21
21
|
if (!process.env[TESTOPS_BUILD_COMPLETED_ENV]) {
|
|
22
|
-
throw new Error('
|
|
22
|
+
throw new Error('Test Reporting and Analytics build start not completed yet.');
|
|
23
23
|
}
|
|
24
24
|
this.queue.push(event);
|
|
25
25
|
BStackLogger.debug(`Added data to request queue. Queue length = ${this.queue.length}`);
|
package/build/service.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export default class BrowserstackService implements Services.ServiceInstance {
|
|
|
6
6
|
private _config;
|
|
7
7
|
private _sessionBaseUrl;
|
|
8
8
|
private _failReasons;
|
|
9
|
+
private _hookFailReasons;
|
|
10
|
+
private _pureTestFailReasons;
|
|
9
11
|
private _scenariosThatRan;
|
|
10
12
|
private _failureStatuses;
|
|
11
13
|
private _browser?;
|
|
@@ -25,7 +27,7 @@ export default class BrowserstackService implements Services.ServiceInstance {
|
|
|
25
27
|
private _turboScale;
|
|
26
28
|
constructor(options: BrowserstackConfig & Options.Testrunner, _caps: Capabilities.RemoteCapability, _config: Options.Testrunner);
|
|
27
29
|
_updateCaps(fn: (caps: WebdriverIO.Capabilities | Capabilities.DesiredCapabilities) => void): void;
|
|
28
|
-
beforeSession(config: Omit<Options.Testrunner, 'capabilities'
|
|
30
|
+
beforeSession(config: Omit<Options.Testrunner, 'capabilities'>, capabilities: WebdriverIO.Capabilities): Promise<void>;
|
|
29
31
|
before(caps: Capabilities.RemoteCapability, specs: string[], browser: WebdriverIO.Browser): Promise<void>;
|
|
30
32
|
/**
|
|
31
33
|
* Set the default job name at the suite level to make sure we account
|
package/build/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|