search-and-checkout.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // @ts-check
  2. import {sleep} from 'k6';
  3. import {ShopApiRequest} from '../utils/api-request.js';
  4. const searchQuery = new ShopApiRequest('shop/search.graphql');
  5. const productQuery = new ShopApiRequest('shop/product.graphql');
  6. const addItemToOrderMutation = new ShopApiRequest('shop/add-to-order.graphql');
  7. /**
  8. * Searches for products, adds to order, checks out.
  9. */
  10. export default function() {
  11. const itemsToAdd = Math.ceil(Math.random() * 10);
  12. for (let i = 0; i < itemsToAdd; i ++) {
  13. searchProducts();
  14. const product = findAndLoadProduct();
  15. addToCart(randomItem(product.variants).id);
  16. }
  17. }
  18. function searchProducts() {
  19. for (let i = 0; i < 4; i++) {
  20. searchQuery.post();
  21. sleep(Math.random() * 3 + 0.5);
  22. }
  23. }
  24. function findAndLoadProduct() {
  25. const searchResult = searchQuery.post();
  26. const items = searchResult.data.search.items;
  27. const productResult = productQuery.post({ id: randomItem(items).productId });
  28. return productResult.data.product;
  29. }
  30. function addToCart(variantId) {
  31. const qty = Math.ceil(Math.random() * 4);
  32. addItemToOrderMutation.post({ id: variantId, qty });
  33. }
  34. function randomItem(items) {
  35. return items[Math.floor(Math.random() * items.length)];
  36. }