| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // @ts-check
- import { sleep } from 'k6';
- import { check } from 'k6';
- import { ShopApiRequest } from '../utils/api-request.js';
- const searchQuery = new ShopApiRequest('shop/search.graphql');
- const productQuery = new ShopApiRequest('shop/product.graphql');
- const addItemToOrderMutation = new ShopApiRequest('shop/add-to-order.graphql');
- const setShippingAddressMutation = new ShopApiRequest('shop/set-shipping-address.graphql');
- const getShippingMethodsQuery = new ShopApiRequest('shop/get-shipping-methods.graphql');
- const completeOrderMutation = new ShopApiRequest('shop/complete-order.graphql');
- export let options = {
- stages: [{ duration: '4m', target: 50 }],
- };
- /**
- * Searches for products, adds to order, checks out.
- */
- export default function () {
- const itemsToAdd = Math.ceil(Math.random() * 10);
- for (let i = 0; i < itemsToAdd; i++) {
- searchProducts();
- const product = findAndLoadProduct();
- addToCart(randomItem(product.variants).id);
- }
- setShippingAddressAndCustomer();
- const { data: shippingMethods } = getShippingMethodsQuery.post();
- const { data: order } = completeOrderMutation.post({
- id: [shippingMethods.eligibleShippingMethods.at(0).id],
- });
- check(order, {
- 'Order completed': o => o.addPaymentToOrder.state === 'PaymentAuthorized',
- });
- }
- function searchProducts() {
- for (let i = 0; i < 4; i++) {
- searchQuery.post();
- sleep(Math.random() * 3 + 0.5);
- }
- }
- function findAndLoadProduct() {
- const searchResult = searchQuery.post();
- const items = searchResult.data.search.items;
- const productResult = productQuery.post({ id: randomItem(items).productId });
- return productResult.data.product;
- }
- function addToCart(variantId) {
- const qty = Math.ceil(Math.random() * 4);
- const result = addItemToOrderMutation.post({ id: variantId, qty });
- check(result.data, {
- 'Product added to cart': r =>
- !!r.addItemToOrder.lines.find(l => l.productVariant.id === variantId && l.quantity >= qty),
- });
- }
- function setShippingAddressAndCustomer() {
- const result = setShippingAddressMutation.post({
- address: {
- countryCode: 'GB',
- streetLine1: '123 Test Street',
- },
- customer: {
- emailAddress: `test-user-${Math.random().toString(32).substr(3)}@mail.com`,
- firstName: `Test`,
- lastName: `User`,
- },
- });
- check(result.data, {
- 'Address set': r => r.setOrderShippingAddress.shippingAddress.country === 'United Kingdom',
- });
- }
- function randomItem(items) {
- return items[Math.floor(Math.random() * items.length)];
- }
|