Files
piratepoet/mailpoet/tests/performance/scenarios.js
2024-04-24 13:50:10 +01:00

142 lines
4.8 KiB
JavaScript

/**
* Internal dependencies
*/
import { htmlReport } from 'https://raw.githubusercontent.com/benc-uk/k6-reporter/main/dist/bundle.js';
import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.1/index.js';
import { scenario, k6CloudID, projectName } from './config.js';
import { newsletterListing } from './tests/newsletter-listing.js';
import { subscribersListing } from './tests/subscribers-listing.js';
import { settingsBasic } from './tests/settings-basic.js';
import { subscribersFiltering } from './tests/subscribers-filtering.js';
import { subscribersAdding } from './tests/subscribers-adding.js';
import { formsAdding } from './tests/forms-adding.js';
import { newsletterSearching } from './tests/newsletter-searching.js';
import { newsletterSending } from './tests/newsletter-sending.js';
import { listsViewSubscribers } from './tests/lists-view-subscribers.js';
import { segmentsCreateCustom } from './tests/segments-create-custom.js';
import { newsletterStatistics } from './tests/newsletter-statistics.js';
import { onboardingWizard } from './tests/onboarding-wizard.js';
import { subscribersTrashingRestoring } from './tests/subscribers-trashing-restoring.js';
import { automationCreateCustom } from './tests/automation-create-custom.js';
import { automationCreateWelcome } from './tests/automation-create-welcome.js';
import { automationAnalytics } from './tests/automation-analytics.js';
import { automationTrashRestore } from './tests/automation-trash-restore.js';
import { automationTriggerWorkflow } from './tests/automation-trigger-workflow.js';
import { automationCreateWooCommerce } from './tests/automation-create-woocommerce.js';
import { newsletterPostNotification } from './tests/newsletters-post-notification.js';
import { newsletterReEngagement } from './tests/newsletter-reengagement.js';
import { segmentsSelectTemplate } from './tests/segments-select-template.js';
import { formsSubscribing } from './tests/forms-subscribing.js';
// Scenarios, Thresholds, Tags and Project ID used for K6 Cloud
export let options = {
cloud: {
projectID: k6CloudID,
name: projectName,
},
scenarios: {},
thresholds: {
browser_web_vital_lcp: ['p(75) < 8000'],
browser_web_vital_fid: ['p(75) < 300'],
browser_web_vital_cls: ['p(75) < 0.60'],
browser_web_vital_ttfb: ['p(75) < 4000'],
browser_web_vital_fcp: ['p(75) < 4000'],
browser_web_vital_inp: ['p(75) < 300'],
checks: ['rate==1.0'],
},
tags: {
name: projectName,
},
};
// Separate scenarios for separate testing needs
let scenarios = {
pullrequests: {
executor: 'per-vu-iterations',
options: {
browser: {
type: 'chromium', // chromium is the only supported browser type
},
},
vus: 1,
iterations: 1,
maxDuration: '10m',
exec: 'pullRequests',
},
nightlytests: {
executor: 'per-vu-iterations',
options: {
browser: {
type: 'chromium',
},
},
vus: 1,
iterations: 1,
maxDuration: '15m',
exec: 'nightly',
},
};
// Scenario execution setup
if (scenario) {
// Use just a single scenario if `--env scenario=whatever` is used
options.scenarios[scenario] = scenarios[scenario];
} else {
// Use all scenarios
options.scenarios = scenarios;
}
// Run those tests against a pull request build
// Note: there are 22 checks in total
export async function pullRequests() {
await onboardingWizard();
await newsletterListing();
await newsletterSearching();
await newsletterPostNotification();
await newsletterReEngagement();
await automationTrashRestore();
await automationCreateWelcome();
await automationCreateWooCommerce();
await listsViewSubscribers();
await subscribersListing();
await subscribersFiltering();
await subscribersAdding();
await formsAdding();
await segmentsSelectTemplate();
}
// Run those tests against trunk in a nightly build
// Note: there are 41 checks in total
export async function nightly() {
await newsletterListing();
await newsletterStatistics();
await newsletterSearching();
await newsletterSending();
await newsletterPostNotification();
await newsletterReEngagement();
await automationTrashRestore();
await automationCreateCustom();
await automationCreateWelcome();
await automationCreateWooCommerce();
await automationAnalytics();
await automationTriggerWorkflow();
await subscribersListing();
await subscribersFiltering();
await subscribersAdding();
await subscribersTrashingRestoring();
await listsViewSubscribers();
await segmentsCreateCustom();
await segmentsSelectTemplate();
await settingsBasic();
await formsAdding();
await formsSubscribing();
}
// HTML report data saved in performance folder
export function handleSummary(data) {
return {
'tests/performance/_output/k6report.html': htmlReport(data),
stdout: textSummary(data, { indent: ' ', enableColors: true }),
};
}