Skip to content

Commit 9fb1a12

Browse files
authored
Generate E2E typescript test report for ReportPortal (#22590)
feat: reportportal integration Signed-off-by: mdolhalo <[email protected]>
1 parent a90153c commit 9fb1a12

17 files changed

+462
-72
lines changed

tests/e2e/configs/mocharc.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ module.exports = {
2121
timeout: MOCHA_CONSTANTS.MOCHA_DEFAULT_TIMEOUT,
2222
slow: 60000,
2323
reporter: 'mocha-multi-reporters',
24-
reporterOptions: 'configFile=configs/reporters-config.json',
24+
reporterOptions: 'configFile=configs/reporters.config.js',
2525
ui: 'tdd',
26+
extension: ['js', 'cjs', 'mjs'],
2627
require: ['dist/specs/MochaHooks.js', 'ts-node/register'],
2728
bail: MOCHA_CONSTANTS.MOCHA_BAIL,
2829
'full-trace': true,
@@ -39,5 +40,6 @@ module.exports = {
3940
: MOCHA_CONSTANTS.MOCHA_USERSTORY
4041
? [`dist/specs/**/${MOCHA_CONSTANTS.MOCHA_USERSTORY}.spec.js`, `dist/specs/${MOCHA_CONSTANTS.MOCHA_USERSTORY}.spec.js`]
4142
: ['dist/specs/**/**.spec.js', 'dist/specs/**.spec.js'],
42-
retries: MOCHA_CONSTANTS.MOCHA_RETRIES
43+
retries: MOCHA_CONSTANTS.MOCHA_RETRIES,
44+
grep: MOCHA_CONSTANTS.MOCHA_GREP
4345
};

tests/e2e/configs/reporters-config.json

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/** *******************************************************************
2+
* copyright (c) 2023 Red Hat, Inc.
3+
*
4+
* This program and the accompanying materials are made
5+
* available under the terms of the Eclipse Public License 2.0
6+
* which is available at https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
**********************************************************************/
10+
const { REPORTER_CONSTANTS } = require('../constants/REPORTER_CONSTANTS');
11+
const { BASE_TEST_CONSTANTS } = require('../constants/BASE_TEST_CONSTANTS');
12+
13+
module.exports = {
14+
reporterEnabled: REPORTER_CONSTANTS.REPORTERS_ENABLED(),
15+
allureMochaReporterOptions: {
16+
resultsDir: '.allure-results'
17+
},
18+
reportportalAgentJsMochaReporterOptions: {
19+
apiKey: REPORTER_CONSTANTS.RP_API_KEY,
20+
endpoint: REPORTER_CONSTANTS.RP_ENDPOINT(),
21+
project: REPORTER_CONSTANTS.RP_PROJECT(),
22+
launch: `${REPORTER_CONSTANTS.RP_LAUNCH_NAME}`,
23+
attributes: [
24+
{
25+
key: 'build',
26+
value: `${BASE_TEST_CONSTANTS.TESTING_APPLICATION_VERSION}`
27+
},
28+
{
29+
key: 'ocp version',
30+
value: `${BASE_TEST_CONSTANTS.OCP_VERSION}`
31+
},
32+
{
33+
key: 'ocp infra',
34+
value: `${BASE_TEST_CONSTANTS.OCP_INFRA}`
35+
},
36+
{
37+
key: 'application',
38+
value: BASE_TEST_CONSTANTS.TESTING_APPLICATION_NAME()
39+
},
40+
{
41+
key: 'url',
42+
value: BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL
43+
}
44+
],
45+
rerun: REPORTER_CONSTANTS.RP_RERUN(),
46+
rerunOf: REPORTER_CONSTANTS.RP_RERUN_UUID,
47+
restClientConfig: {
48+
timeout: 1200000
49+
}
50+
}
51+
};

tests/e2e/configs/sh-scripts/runFunctionalTests.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
validateParameters(){
55
# Validate required parameters
6-
if [ -z "$OCP_VERSION" ] || [ -z "$ARCH_VERSION" ] || [ -z "$TS_SELENIUM_BASE_URL" ]; then
7-
echo "The ARCH_VERSION, OCP_VERSION or TS_SELENIUM_BASE_URL is not set!";
6+
if [ -z "$OCP_VERSION" ] || [ -z "$OCP_INFRA" ] || [ -z "$TS_SELENIUM_BASE_URL" ]; then
7+
echo "The OCP_INFRA, OCP_VERSION or TS_SELENIUM_BASE_URL is not set!";
88
echo "Please, set all required environment variable parameters"
99
exit 1
1010
fi
@@ -17,22 +17,22 @@ validateParameters(){
1717
launchAPITests() {
1818
export MOCHA_SUITE="APITest"
1919
echo "MOCHA_SUITE = ${MOCHA_SUITE}"
20-
export RP_LAUNCH_NAME="API tests suite"
20+
export RP_LAUNCH_NAME="API tests suite $TEST_ENVIRONMENT"
2121
echo "suites/$MOCHA_DIRECTORY/$MOCHA_SUITE"
2222
npm run driver-less-test
2323
}
2424

2525
launchDynamicallyGeneratingAPITests() {
2626
export MOCHA_SUITE="DynamicallyGeneratingAPITest"
27-
export RP_LAUNCH_NAME="Application inbuilt DevWorkspaces API tests suite"
27+
export RP_LAUNCH_NAME="Application inbuilt DevWorkspaces API tests suite $TEST_ENVIRONMENT"
2828
echo "MOCHA_SUITE = ${MOCHA_SUITE}"
2929
echo "suites/$MOCHA_DIRECTORY/$MOCHA_SUITE"
3030
npm run delayed-test
3131
}
3232

3333
launchUITests() {
3434
export MOCHA_SUITE="UITest"
35-
export RP_LAUNCH_NAME="UI tests suite"
35+
export RP_LAUNCH_NAME="UI tests suite $TEST_ENVIRONMENT"
3636
echo "MOCHA_SUITE = ${MOCHA_SUITE}"
3737
echo "suites/$MOCHA_DIRECTORY/$MOCHA_SUITE"
3838
npm run test
@@ -59,7 +59,7 @@ initTestValues() {
5959
export MOCHA_DIRECTORY="online-ocp"
6060
fi
6161

62-
export TEST_ENVIRONMENT="$ARCH_VERSION $MOCHA_DIRECTORY $OCP_VERSION"
62+
export TEST_ENVIRONMENT="$OCP_INFRA $MOCHA_DIRECTORY $OCP_VERSION"
6363
export DELETE_WORKSPACE_ON_FAILED_TEST=${DELETE_WORKSPACE_ON_FAILED_TEST:-'false'}
6464
export DELETE_SCREENCAST_IF_TEST_PASS=${DELETE_SCREENCAST_IF_TEST_PASS:-'true'}
6565
export NODE_TLS_REJECT_UNAUTHORIZED=${NODE_TLS_REJECT_UNAUTHORIZED:-'0'}

tests/e2e/constants/BASE_TEST_CONSTANTS.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export enum Platform {
1313
}
1414

1515
export const BASE_TEST_CONSTANTS: {
16-
ARCH_VERSION: string;
16+
OCP_INFRA: string;
1717
DELETE_WORKSPACE_ON_FAILED_TEST: boolean;
1818
IS_CLUSTER_DISCONNECTED: () => boolean;
1919
IS_PRODUCT_DOCUMENTATION_RELEASED: any;
@@ -30,16 +30,17 @@ export const BASE_TEST_CONSTANTS: {
3030
TS_SELENIUM_PROJECT_ROOT_FILE_NAME: string;
3131
TS_SELENIUM_REQUEST_INTERCEPTOR: boolean;
3232
TS_SELENIUM_RESPONSE_INTERCEPTOR: boolean;
33+
TESTING_APPLICATION_NAME: () => string;
3334
} = {
3435
/**
3536
* base URL of the application which should be checked
3637
*/
3738
TS_SELENIUM_BASE_URL: !process.env.TS_SELENIUM_BASE_URL ? 'http://sample-url' : process.env.TS_SELENIUM_BASE_URL.replace(/\/$/, ''),
3839

3940
/**
40-
* system arch type
41+
* ocp infra type, possible values "PSI", "AWS", "IBM Z", "IBM Power"
4142
*/
42-
ARCH_VERSION: process.env.ARCH_VERSION || '',
43+
OCP_INFRA: process.env.OCP_INFRA || '',
4344

4445
/**
4546
* openShift version
@@ -51,6 +52,17 @@ export const BASE_TEST_CONSTANTS: {
5152
*/
5253
TEST_ENVIRONMENT: process.env.TEST_ENVIRONMENT || '',
5354

55+
/**
56+
* application name (DevSpaces or Che)
57+
*/
58+
TESTING_APPLICATION_NAME: (): string => {
59+
return BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL.includes('devspaces')
60+
? 'devspaces'
61+
: BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL.includes('che')
62+
? 'che'
63+
: 'default';
64+
},
65+
5466
/**
5567
* testing application version
5668
*/

tests/e2e/constants/MOCHA_CONSTANTS.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const MOCHA_CONSTANTS: {
1717
MOCHA_USERSTORY: undefined | string;
1818
MOCHA_RETRIES: string | number;
1919
MOCHA_BAIL: boolean;
20+
MOCHA_GREP: string | undefined;
2021
} = {
2122
MOCHA_DIRECTORY: process.env.MOCHA_DIRECTORY || undefined,
2223

@@ -26,9 +27,11 @@ export const MOCHA_CONSTANTS: {
2627

2728
MOCHA_DELAYED_SUITE: process.env.MOCHA_DELAYED_SUITE === 'true',
2829

29-
MOCHA_DEFAULT_TIMEOUT: process.env.MOCHA_DEFAULT_TIMEOUT || 420000,
30+
MOCHA_DEFAULT_TIMEOUT: Number(process.env.MOCHA_DEFAULT_TIMEOUT) || 420000,
3031

3132
MOCHA_RETRIES: process.env.MOCHA_RETRIES || BASE_TEST_CONSTANTS.TEST_ENVIRONMENT === '' ? 0 : 2,
3233

33-
MOCHA_SUITE: process.env.MOCHA_SUITE || undefined
34+
MOCHA_SUITE: process.env.MOCHA_SUITE || undefined,
35+
36+
MOCHA_GREP: process.env.MOCHA_GREP || undefined
3437
};

tests/e2e/constants/REPORTER_CONSTANTS.ts

Lines changed: 98 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,29 @@
77
*
88
* SPDX-License-Identifier: EPL-2.0
99
**********************************************************************/
10+
import { BASE_TEST_CONSTANTS } from './BASE_TEST_CONSTANTS';
11+
import { MOCHA_CONSTANTS } from './MOCHA_CONSTANTS';
12+
1013
export const REPORTER_CONSTANTS: {
14+
DELETE_SCREENCAST_IF_TEST_PASS: boolean;
15+
RP_ENDPOINT(): string;
16+
RP_IS_LOCAL_SERVER: boolean;
17+
REPORTERS_ENABLED(): string;
18+
RP_API_KEY: string;
19+
RP_PROJECT(): string;
20+
RP_RERUN(): boolean;
21+
RP_RERUN_UUID: string | undefined;
22+
RP_LAUNCH_NAME: string;
23+
RP_USER: string;
24+
RP_USE_PERSONAL: boolean;
25+
SAVE_ALLURE_REPORT_DATA: boolean;
26+
SAVE_RP_REPORT_DATA: boolean;
1127
TS_SELENIUM_DELAY_BETWEEN_SCREENSHOTS: number;
12-
TS_SELENIUM_REPORT_FOLDER: string;
1328
TS_SELENIUM_EXECUTION_SCREENCAST: boolean;
14-
TS_SELENIUM_PRINT_TIMEOUT_VARIABLES: string | boolean;
1529
TS_SELENIUM_LOAD_TEST_REPORT_FOLDER: string;
1630
TS_SELENIUM_LOG_LEVEL: string;
17-
DELETE_SCREENCAST_IF_TEST_PASS: boolean;
31+
TS_SELENIUM_PRINT_TIMEOUT_VARIABLES: string | boolean;
32+
TS_SELENIUM_REPORT_FOLDER: string;
1833
} = {
1934
/**
2035
* path to folder with load tests execution report.
@@ -44,10 +59,88 @@ export const REPORTER_CONSTANTS: {
4459
/**
4560
* log level settings, possible variants: 'INFO' (by default), 'DEBUG', 'TRACE'.
4661
*/
47-
TS_SELENIUM_LOG_LEVEL: process.env.TS_SELENIUM_LOG_LEVEL || 'INFO',
62+
TS_SELENIUM_LOG_LEVEL: process.env.TS_SELENIUM_LOG_LEVEL || 'TRACE',
4863

4964
/**
5065
* print all timeout variables when tests launch, default to false
5166
*/
52-
TS_SELENIUM_PRINT_TIMEOUT_VARIABLES: process.env.TS_SELENIUM_PRINT_TIMEOUT_VARIABLES || false
67+
TS_SELENIUM_PRINT_TIMEOUT_VARIABLES: process.env.TS_SELENIUM_PRINT_TIMEOUT_VARIABLES === 'true',
68+
69+
/**
70+
* use local Allure reporter, default to false
71+
*/
72+
SAVE_ALLURE_REPORT_DATA: process.env.SAVE_ALLURE_REPORT_DATA === 'true',
73+
74+
/**
75+
* use ReportPortal reporter, default to false
76+
*/
77+
SAVE_RP_REPORT_DATA: process.env.SAVE_RP_REPORT_DATA === 'true',
78+
79+
/**
80+
* list of enabler reporters
81+
*/
82+
REPORTERS_ENABLED: (): string => {
83+
let reporters: string = 'dist/utils/CheReporter.js';
84+
if (REPORTER_CONSTANTS.SAVE_ALLURE_REPORT_DATA) {
85+
reporters += ',allure-mocha';
86+
}
87+
if (REPORTER_CONSTANTS.SAVE_RP_REPORT_DATA) {
88+
reporters += ',@reportportal/agent-js-mocha';
89+
}
90+
return reporters;
91+
},
92+
93+
/**
94+
* reportPortal app key or user token
95+
*/
96+
RP_API_KEY: process.env.RP_API_KEY || '',
97+
98+
/**
99+
* user name on ReportPortal
100+
*/
101+
RP_USER: process.env.RP_USER || process.env.USER || process.env.BUILD_USER_ID || '',
102+
103+
/**
104+
* launch name to save report
105+
*/
106+
RP_LAUNCH_NAME: process.env.RP_LAUNCH_NAME || `Test run ${MOCHA_CONSTANTS.MOCHA_USERSTORY}`,
107+
108+
/**
109+
* launch name to save report
110+
*/
111+
RP_RERUN_UUID: process.env.RP_RERUN_UUID || undefined,
112+
113+
/**
114+
* is launch rerun
115+
*/
116+
RP_RERUN: (): boolean => !!REPORTER_CONSTANTS.RP_RERUN_UUID,
117+
118+
/**
119+
* is local or online server to use
120+
*/
121+
RP_IS_LOCAL_SERVER: process.env.RP_IS_LOCAL_SERVER !== 'false',
122+
123+
/**
124+
* url with endpoints where ReportPortal is
125+
*/
126+
RP_ENDPOINT: (): string => {
127+
return process.env.RP_ENDPOINT || REPORTER_CONSTANTS.RP_IS_LOCAL_SERVER
128+
? 'http://localhost:8080/api/v1'
129+
: 'https://reportportal-crw.apps.ocp-c1.prod.psi.redhat.com/api/v1';
130+
},
131+
132+
/**
133+
* use personal project to save launch, if false launch will be send to devspaces or che project, true by default
134+
*/
135+
RP_USE_PERSONAL: process.env.RP_USE_PERSONAL !== 'false',
136+
137+
/**
138+
* project name to save launch
139+
*/
140+
RP_PROJECT: (): string => {
141+
const project: string = REPORTER_CONSTANTS.RP_USE_PERSONAL
142+
? `${REPORTER_CONSTANTS.RP_USER}_personal`
143+
: BASE_TEST_CONSTANTS.TESTING_APPLICATION_NAME();
144+
return process.env.RP_PROJECT || project;
145+
}
53146
};

tests/e2e/constants/TIMEOUT_CONSTANTS.ts

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,23 @@
88
* SPDX-License-Identifier: EPL-2.0
99
**********************************************************************/
1010
export const TIMEOUT_CONSTANTS: {
11-
TS_FIND_EXTENSION_TEST_TIMEOUT: number;
12-
TS_SELENIUM_WORKSPACE_STATUS_POLLING: number;
11+
TS_CLICK_DASHBOARD_ITEM_TIMEOUT: number;
1312
TS_COMMON_DASHBOARD_WAIT_TIMEOUT: number;
14-
TS_EXPAND_PROJECT_TREE_ITEM_TIMEOUT: number;
15-
TS_DIALOG_WINDOW_DEFAULT_TIMEOUT: number;
13+
TS_COMMON_PLUGIN_TEST_TIMEOUT: number;
1614
TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT: number;
15+
TS_DIALOG_WINDOW_DEFAULT_TIMEOUT: number;
16+
TS_EDITOR_TAB_INTERACTION_TIMEOUT: number;
17+
TS_EXPAND_PROJECT_TREE_ITEM_TIMEOUT: number;
18+
TS_FIND_EXTENSION_TEST_TIMEOUT: number;
19+
TS_IDE_LOAD_TIMEOUT: number;
1720
TS_SELENIUM_CLICK_ON_VISIBLE_ITEM: number;
1821
TS_SELENIUM_DEFAULT_ATTEMPTS: number;
19-
TS_SELENIUM_WORKSPACE_STATUS_ATTEMPTS: number;
20-
TS_SELENIUM_WAIT_FOR_URL: number;
2122
TS_SELENIUM_DEFAULT_POLLING: number;
22-
TS_IDE_LOAD_TIMEOUT: number;
23+
TS_SELENIUM_LOAD_PAGE_TIMEOUT: number;
24+
TS_SELENIUM_START_WORKSPACE_TIMEOUT: number;
25+
TS_SELENIUM_WAIT_FOR_URL: number;
2326
TS_WAIT_LOADER_ABSENCE_TIMEOUT: number;
2427
TS_WAIT_LOADER_PRESENCE_TIMEOUT: number;
25-
TS_SELENIUM_START_WORKSPACE_TIMEOUT: number;
26-
TS_SELENIUM_LOAD_PAGE_TIMEOUT: number;
27-
TS_CLICK_DASHBOARD_ITEM_TIMEOUT: number;
28-
TS_COMMON_PLUGIN_TEST_TIMEOUT: number;
29-
TS_EDITOR_TAB_INTERACTION_TIMEOUT: number;
3028
} = {
3129
/**
3230
* default amount of tries, "5" by default.
@@ -45,16 +43,6 @@ export const TIMEOUT_CONSTANTS: {
4543
*/
4644
TS_SELENIUM_WAIT_FOR_URL: Number(process.env.TS_SELENIUM_WAIT_FOR_URL) || 10_000,
4745

48-
/**
49-
* amount of tries for checking workspace status.
50-
*/
51-
TS_SELENIUM_WORKSPACE_STATUS_ATTEMPTS: Number(process.env.TS_SELENIUM_WORKSPACE_STATUS_ATTEMPTS) || 90,
52-
53-
/**
54-
* delay in milliseconds between checking workspace status tries.
55-
*/
56-
TS_SELENIUM_WORKSPACE_STATUS_POLLING: Number(process.env.TS_SELENIUM_WORKSPACE_STATUS_POLLING) || 10000,
57-
5846
/**
5947
* wait between workspace started and IDE ready to be used, "20 000" by default.
6048
*/

0 commit comments

Comments
 (0)