diff --git a/tests/performance/requests/shopper/cart-remove-item.js b/tests/performance/requests/shopper/cart-remove-item.js new file mode 100644 index 00000000000..483e36b9845 --- /dev/null +++ b/tests/performance/requests/shopper/cart-remove-item.js @@ -0,0 +1,117 @@ +import { sleep, check, group } from "k6"; +import http from "k6/http"; +import { Trend } from "k6/metrics"; +import { randomIntBetween } from "https://jslib.k6.io/k6-utils/1.1.0/index.js"; +import { findBetween } from "https://jslib.k6.io/k6-utils/1.1.0/index.js"; +import { + base_url, + product_sku, + product_id, + think_time_min, + think_time_max, +} from "../../config.js"; +import { + htmlRequestHeader, + jsonRequestHeader, + commonRequestHeaders, + commonGetRequestHeaders, + commonPostRequestHeaders, + commonNonStandardHeaders, +} from "../../headers.js"; + +// Custom metrics to add to standard results output. +let addToCartTrend = new Trend("wc_post_wc-ajax_add_to_cart"); +let viewCartTrend = new Trend("wc_get_cart"); +let removeItemCartTrend = new Trend("wc_get_cart_remove_item"); + +export function cartRemoveItem() { + let response; + let item_to_remove; + let wpnonce; + + group("Product Page Add to cart", function () { + var requestheaders = Object.assign({}, + jsonRequestHeader, + commonRequestHeaders, + commonPostRequestHeaders, + commonNonStandardHeaders + ); + + response = http.post( + `${base_url}/?wc-ajax=add_to_cart`, + { + product_sku: `${product_sku}`, + product_id: `${product_id}`, + quantity: "1", + }, + { + headers: requestheaders, + } + ); + addToCartTrend.add(response.timings.duration); + check(response, { + "is status 200": (r) => r.status === 200, + }); + }); + + sleep(randomIntBetween(`${think_time_min}`, `${think_time_max}`)); + + group("View Cart", function () { + var requestheaders = Object.assign({}, + htmlRequestHeader, + commonRequestHeaders, + commonGetRequestHeaders, + commonNonStandardHeaders + ); + + response = http.get(`${base_url}/cart`, { + headers: requestheaders, + }); + viewCartTrend.add(response.timings.duration); + check(response, { + "is status 200": (r) => r.status === 200, + "body does not contain: 'your cart is currently empty'": ( + response + ) => !response.body.includes("Your cart is currently empty."), + }); + + // Correlate cart item value for use in subsequent requests. + item_to_remove = findBetween( + response.body, + '/cart?remove_item=', + '&' + ); + wpnonce = findBetween( + response.body, + '_wpnonce=', + '" class="remove"' + ); + }); + + sleep(randomIntBetween(`${think_time_min}`, `${think_time_max}`)); + + group("Remove item from cart", function () { + var requestheaders = Object.assign({}, + jsonRequestHeader, + commonRequestHeaders, + commonPostRequestHeaders, + commonNonStandardHeaders + ); + + response = http.get(`${base_url}/cart?remove_item=${item_to_remove}&_wpnonce=${wpnonce}`, { + headers: requestheaders, + }); + removeItemCartTrend.add(response.timings.duration); + check(response, { + "is status 200": (r) => r.status === 200, + "body contains: 'removed'": (response) => + response.body.includes(" removed."), + }); + }); + + sleep(randomIntBetween(`${think_time_min}`, `${think_time_max}`)); +} + +export default function () { + cartRemoveItem(); +}