woocommerce/tests/performance/requests/shopper/cart-apply-coupon.js

154 lines
3.8 KiB
JavaScript
Raw Normal View History

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,
coupon_code,
think_time_min,
think_time_max,
} from "../../config.js";
import {
htmlRequestHeader,
jsonRequestHeader,
commonRequestHeaders,
commonGetRequestHeaders,
commonPostRequestHeaders,
commonNonStandardHeaders,
contentTypeRequestHeader,
} 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 applyCouponTrend = new Trend("wc_post_wc-ajax_apply_coupon");
let applyCouponCartTrend = new Trend("wc_post_cart");
export function cartApplyCoupon() {
let response;
let apply_coupon_nonce;
let item_name;
let woocommerce_cart_nonce;
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.
apply_coupon_nonce = findBetween(
response.body,
'apply_coupon_nonce":"',
'","'
);
item_name = findBetween(
response.body,
'name="cart[',
'][qty]'
);
woocommerce_cart_nonce = response
.html()
.find("input[name=woocommerce-cart-nonce]")
.first()
.attr("value");
});
sleep(randomIntBetween(`${think_time_min}`, `${think_time_max}`));
group("Apply Coupon", function () {
var requestheaders = Object.assign({},
jsonRequestHeader,
commonRequestHeaders,
commonPostRequestHeaders,
commonNonStandardHeaders,
contentTypeRequestHeader
);
response = http.post(
`${base_url}/?wc-ajax=apply_coupon`,
{
coupon_code: `${coupon_code}`,
security: `${apply_coupon_nonce}`,
},
{
headers: requestheaders,
}
);
applyCouponTrend.add(response.timings.duration);
check(response, {
"is status 200": (r) => r.status === 200,
"body contains: 'Coupon code applied successfully'": (response) =>
response.body.includes("Coupon code applied successfully"),
});
response = http.post(`${base_url}/cart`,
{
_wp_http_referer: "%2Fcart",
//"cart["+`${item_name}`+"][qty]": "1",
coupon_code: "",
"woocommerce-cart-nonce": `${woocommerce_cart_nonce}`,
},
{
headers: requestheaders,
}
);
applyCouponCartTrend.add(response.timings.duration);
check(response, {
"is status 200": (r) => r.status === 200,
"body contains: 'woocommerce-remove-coupon' class": (response) =>
response.body.includes('class="woocommerce-remove-coupon"'),
});
});
sleep(randomIntBetween(`${think_time_min}`, `${think_time_max}`));
}
export default function () {
cartApplyCoupon();
}