-
Notifications
You must be signed in to change notification settings - Fork 42
Description
We've been struggling with unfinished launches and merge timeouts in ReportPortal. Unfinished launches, also reported in other issues (such as #62, #63, #64, #73, #79, #133, ...) , for us, especially did come up for suites with number of test greater than 10-20. Smaller numbers appear flaky, but finish at least most of the times.
Root cause appears to be cypress-io/cypress#7139.
As agent-js-cypress
is using an async architecture, it also suffers from Cypress killing IPC subprocess before it finishes pushing all data into ReportPortal. IPC messages come in very slow, so depending on the number of events / messages, pushing all changes to ReportPortal takes much longer than Cypress keeps browser runtime open.
The following workaround on Cypress 10+ did fix upload and merge for us. As I do not think the issue can be easily fixed in agent-js-cypress
, I would recommend to try the workaround and document. This requires isLaunchMergeRequired
to be true
. Merging itself could also be disabled in after:run
depending on project needs, but to find out when agent-js-cypress
is finished, the rplaunchinprogress
temp files are needed.
cypress.config.ts:
const delay = async (ms: number) => new Promise((res) => setTimeout(res, ms));
const reportportalOptions = {
endpoint: 'https://reportportal.abc.io/api/v1',
isLaunchMergeRequired: true,
debug: false,
restClientConfig: {
timeout: 360000,
},
...
};
export default defineConfig({
...
reporter: 'cypress-multi-reporters',
reporterOptions: {
reporterEnabled: '@reportportal/agent-js-cypress, spec',
reportportalAgentJsCypressReporterOptions: reportportalOptions
},
e2e: {
setupNodeEvents(on, config) {
// keep Cypress running until the ReportPortal reporter is finished. this is a
// very critical step, as otherwise results might not be completely pushed into
// ReportPortal, resulting in unfinsihed launches and failing merges
on('after:run', async () => {
console.log('Wait for reportportal agent to finish...');
while (glob.sync('rplaunchinprogress*.tmp').length > 0) {
await delay(2000);
}
console.log('reportportal agent finished');
if (reportportalOptions.isLaunchMergeRequired) {
try {
console.log('Merging launches...');
await mergeLaunches(reportportalOptions);
console.log('Launches successfully merged!');
deleteLaunchFiles();
} catch (mergeError: unknown) {
console.error(mergeError);
}
}
});
registerReportPortalPlugin(on, config);
return config;
},
...
baseUrl: 'http://localhost:9000',
},
});
Also be aware of an issue in @reportportal/client-javascript
not merging more than 20 launches.
reportportal/client-javascript#86
reportportal/client-javascript#103