From 5019a344a1bb762c5bccd54d989f17b25dfb8613 Mon Sep 17 00:00:00 2001 From: Tam Mullen Date: Fri, 10 Mar 2023 17:47:33 +0000 Subject: [PATCH] Add k6 release regression test (#37146) * Added test scenario for release regression testing --- .../changelog/add-k6-regression-test | 5 + .../tests/wc-regression-test-load.js | 330 ++++++++++++++++++ 2 files changed, 335 insertions(+) create mode 100644 plugins/woocommerce/changelog/add-k6-regression-test create mode 100644 plugins/woocommerce/tests/performance/tests/wc-regression-test-load.js diff --git a/plugins/woocommerce/changelog/add-k6-regression-test b/plugins/woocommerce/changelog/add-k6-regression-test new file mode 100644 index 00000000000..bec84721135 --- /dev/null +++ b/plugins/woocommerce/changelog/add-k6-regression-test @@ -0,0 +1,5 @@ +Significance: patch +Type: add +Comment: Perf test not included in release + + diff --git a/plugins/woocommerce/tests/performance/tests/wc-regression-test-load.js b/plugins/woocommerce/tests/performance/tests/wc-regression-test-load.js new file mode 100644 index 00000000000..57a4698feff --- /dev/null +++ b/plugins/woocommerce/tests/performance/tests/wc-regression-test-load.js @@ -0,0 +1,330 @@ +/* eslint-disable eqeqeq */ +/* eslint-disable no-undef */ +/** + * Internal dependencies + */ +import { homePage } from '../requests/shopper/home.js'; +import { shopPage } from '../requests/shopper/shop-page.js'; +import { searchProduct } from '../requests/shopper/search-product.js'; +import { singleProduct } from '../requests/shopper/single-product.js'; +import { cart } from '../requests/shopper/cart.js'; +import { cartRemoveItem } from '../requests/shopper/cart-remove-item.js'; +import { cartApplyCoupon } from '../requests/shopper/cart-apply-coupon.js'; +import { checkoutGuest } from '../requests/shopper/checkout-guest.js'; +import { checkoutCustomerLogin } from '../requests/shopper/checkout-customer-login.js'; +import { myAccountOrders } from '../requests/shopper/my-account-orders.js'; +import { categoryPage } from '../requests/shopper/category-page.js'; +import { products } from '../requests/merchant/products.js'; +import { addProduct } from '../requests/merchant/add-product.js'; +import { coupons } from '../requests/merchant/coupons.js'; +import { orders } from '../requests/merchant/orders.js'; +import { ordersSearch } from '../requests/merchant/orders-search.js'; +import { ordersFilter } from '../requests/merchant/orders-filter.js'; +import { addOrder } from '../requests/merchant/add-order.js'; +import { homeWCAdmin } from '../requests/merchant/home-wc-admin.js'; +import { myAccountMerchantLogin } from '../requests/merchant/my-account-merchant.js'; +import { wpLogin } from '../requests/merchant/wp-login.js'; +import { ordersAPI } from '../requests/api/orders.js'; +import { admin_acc_login } from '../config.js'; + +const shopper_request_threshold = 'p(95)<100000'; +const merchant_request_threshold = 'p(95)<100000'; +const api_request_threshold = 'p(95)<100000'; + +export const options = { + scenarios: { + merchantOrders: { + executor: 'ramping-arrival-rate', + startRate: 2, // starting iterations per timeUnit + timeUnit: '20s', + preAllocatedVUs: 5, + maxVUs: 9, + stages: [ + // target value is iterations per timeUnit + { target: 1, duration: '60s' }, + { target: 2, duration: '500s' }, + { target: 1, duration: '60' }, + ], + exec: 'merchantOrderFlows', + }, + merchantOther: { + executor: 'ramping-arrival-rate', + startRate: 2, // starting iterations per timeUnit + timeUnit: '20s', + preAllocatedVUs: 5, + maxVUs: 9, + stages: [ + // target value is iterations per timeUnit + { target: 1, duration: '60s' }, + { target: 2, duration: '500s' }, + { target: 1, duration: '60' }, + ], + exec: 'merchantOtherFlows', + }, + shopperBrowsing: { + executor: 'ramping-arrival-rate', + startRate: 2, // starting iterations per timeUnit + timeUnit: '10s', + preAllocatedVUs: 5, + maxVUs: 9, + stages: [ + // target value is iterations per timeUnit + { target: 2, duration: '60s' }, + { target: 10, duration: '500s' }, + { target: 1, duration: '60' }, + ], + exec: 'shopperBrowsingFlows', + }, + shopperGuestCheckouts: { + executor: 'ramping-arrival-rate', + startRate: 2, // starting iterations per timeUnit + timeUnit: '20s', + preAllocatedVUs: 5, + maxVUs: 9, + stages: [ + // target value is iterations per timeUnit + { target: 1, duration: '60s' }, + { target: 2, duration: '500s' }, + { target: 1, duration: '60' }, + ], + exec: 'checkoutGuestFlow', + }, + shopperCustomerCheckouts: { + executor: 'ramping-arrival-rate', + startRate: 2, // starting iterations per timeUnit + timeUnit: '20s', + preAllocatedVUs: 5, + maxVUs: 9, + stages: [ + // target value is iterations per timeUnit + { target: 1, duration: '60s' }, + { target: 2, duration: '500s' }, + { target: 1, duration: '60' }, + ], + exec: 'checkoutCustomerLoginFlow', + }, + apiBackground: { + executor: 'ramping-arrival-rate', + startRate: 1, // starting iterations per timeUnit + timeUnit: '30s', + preAllocatedVUs: 5, + maxVUs: 5, + stages: [ + // target value is iterations per timeUnit + { target: 1, duration: '60s' }, + { target: 2, duration: '500s' }, + { target: 1, duration: '60' }, + ], + exec: 'allAPIFlow', + }, + }, + thresholds: { + // Listing individual metrics due to https://github.com/grafana/k6/issues/1321 + 'http_req_duration{name:Shopper - Site Root}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Shop Page}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Search Products}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Category Page}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Product Page}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - wc-ajax=add_to_cart}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - View Cart}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Remove Item From Cart}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - wc-ajax=apply_coupon}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Update Cart}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - View Checkout}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - wc-ajax=update_order_review}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - wc-ajax=checkout}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Order Received}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - wc-ajax=get_refreshed_fragments}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Login to Checkout}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - My Account Login Page}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - Login to My Account}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - My Account}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - My Account Orders}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Shopper - My Account Open Order}': [ + `${ shopper_request_threshold }`, + ], + 'http_req_duration{name:Merchant - WP Login Page}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Login to WP Admin}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - WC-Admin}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - wc-analytics/orders?}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - wc-analytics/products/reviews?}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - wc-analytics/products/low-in-stock?}': + [ `${ merchant_request_threshold }` ], + 'http_req_duration{name:Merchant - All Orders}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Completed Orders}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - New Order Page}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Create New Order}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Open Order}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Update Existing Order Status}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Search Orders By Product}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Search Orders By Customer Email}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Search Orders By Customer Address}': + [ `${ merchant_request_threshold }` ], + 'http_req_duration{name:Merchant - Filter Orders By Month}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Filter Orders By Customer}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - All Products}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Add New Product}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - action=sample-permalink}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - action=heartbeat autosave}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Update New Product}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - Coupons}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - wc-admin/onboarding/tasks?}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - wc-analytics/admin/notes?}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:Merchant - wc-admin/options?options=woocommerce_ces_tracks_queue}': + [ `${ merchant_request_threshold }` ], + 'http_req_duration{name:Merchant - action=heartbeat}': [ + `${ merchant_request_threshold }`, + ], + 'http_req_duration{name:API - Create Order}': [ + `${ api_request_threshold }`, + ], + 'http_req_duration{name:API - Retrieve Order}': [ + `${ api_request_threshold }`, + ], + 'http_req_duration{name:API - Update Order (Status)}': [ + `${ api_request_threshold }`, + ], + 'http_req_duration{name:API - Delete Order}': [ + `${ api_request_threshold }`, + ], + 'http_req_duration{name:API - Batch Create Orders}': [ + `${ api_request_threshold }`, + ], + 'http_req_duration{name:API - Batch Update (Status) Orders}': [ + `${ api_request_threshold }`, + ], + }, +}; + +// Use myAccountMerchantLogin() instead of wpLogin() if having issues with login. +export function merchantOrderFlows() { + if ( admin_acc_login === true ) { + myAccountMerchantLogin(); + } else { + wpLogin(); + } + addOrder(); + orders(); + ordersSearch(); + ordersFilter(); +} + +// Use myAccountMerchantLogin() instead of wpLogin() if having issues with login. +export function merchantOtherFlows() { + if ( admin_acc_login === true ) { + myAccountMerchantLogin(); + } else { + wpLogin(); + } + homeWCAdmin(); + addProduct(); + products(); + coupons(); +} +export function shopperBrowsingFlows() { + homePage(); + shopPage(); + searchProduct(); + singleProduct(); + cartRemoveItem(); + cartApplyCoupon(); + categoryPage(); +} +export function checkoutGuestFlow() { + cart(); + checkoutGuest(); +} +export function checkoutCustomerLoginFlow() { + cart(); + checkoutCustomerLogin(); + myAccountOrders(); +} +export function allAPIFlow() { + ordersAPI(); +}