|
|
@@ -0,0 +1,39 @@
|
|
|
+// @ts-check
|
|
|
+import { check } from 'k6';
|
|
|
+import { ShopApiRequest } from '../utils/api-request.js';
|
|
|
+
|
|
|
+const searchQuery = new ShopApiRequest('shop/search.graphql');
|
|
|
+const addItemToOrderMutation = new ShopApiRequest('shop/add-to-order.graphql');
|
|
|
+
|
|
|
+export let options = {
|
|
|
+ stages: [{ duration: '1m', target: 1 }],
|
|
|
+};
|
|
|
+
|
|
|
+export function setup() {
|
|
|
+ const searchResult = searchQuery.post();
|
|
|
+ const items = searchResult.data.search.items;
|
|
|
+ return items;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Continuously adds random items to a single order for the duration of the test.
|
|
|
+ * Just like very-large-order.js but adds hundreds of items each time, and runs for only 1 minute
|
|
|
+ */
|
|
|
+export default function (products) {
|
|
|
+ for (let i = 0; i < 10000; i++) {
|
|
|
+ addToCart(randomItem(products).productVariantId);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function addToCart(variantId) {
|
|
|
+ const qty = Math.ceil(Math.random() * 500);
|
|
|
+ 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 randomItem(items) {
|
|
|
+ return items[Math.floor(Math.random() * items.length)];
|
|
|
+}
|