Skip to content

Commit

Permalink
CC-34875: Dev performance Phase 2. SAPI tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
bohdanyevtukhov committed Mar 4, 2025
1 parent 655d3d2 commit 4c5faf2
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 5 deletions.
7 changes: 6 additions & 1 deletion dashboards/k6-load-testing-results.json
Original file line number Diff line number Diff line change
Expand Up @@ -1674,9 +1674,14 @@
"selected": false,
"text": "SAPI4_get_carts",
"value": "SAPI4_get_carts"
},
{
"selected": false,
"text": "SAPI5_get_carts_with_items",
"value": "SAPI5_get_carts_with_items"
}
],
"query": "http_req_duration,http_req_blocked,http_req_connecting,http_req_looking_up,http_req_receiving,http_req_sending,http_req_waiting,SAPI7_post_checkout,SAPI9_post_checkout,SAPI15_post_cart_reorder,SAPI19_post_cart_reorder,SAPI16_post_cart_reorder,SAPI17_delete_carts,SAPI18_post_checkout,SAPI20_post_cart_reorder,SAPI21_delete_carts,SAPI22_post_checkout,S2_get_search,M8_get_mp_dashboard,SAPI2_get_catalog_search,SAPI3_get_concrete_products,SAPI4_get_carts",
"query": "http_req_duration,http_req_blocked,http_req_connecting,http_req_looking_up,http_req_receiving,http_req_sending,http_req_waiting,SAPI7_post_checkout,SAPI9_post_checkout,SAPI15_post_cart_reorder,SAPI19_post_cart_reorder,SAPI16_post_cart_reorder,SAPI17_delete_carts,SAPI18_post_checkout,SAPI20_post_cart_reorder,SAPI21_delete_carts,SAPI22_post_checkout,S2_get_search,M8_get_mp_dashboard,SAPI2_get_catalog_search,SAPI3_get_concrete_products,SAPI4_get_carts,SAPI5_get_carts_with_items",
"type": "custom"
}
]
Expand Down
26 changes: 22 additions & 4 deletions src/fixtures/cart.fixture.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ export class CartFixture extends AbstractFixture {
this.customerCount = customerCount;
this.cartCount = cartCount;

const response = this.runDynamicFixture(this._getCustomersWithCartsPayload());
const response = this.runDynamicFixture(this._getCustomersWithQuotesPayload());

const responseData = JSON.parse(response.body).data;
const customers = responseData.filter((item) => /^customer\d+$/.test(item.attributes.key));

return customers.map((customer) => {
const carts = responseData
.filter((item) => item.attributes.key.startsWith(`${customer.attributes.key}Cart`))
.filter((item) => item.attributes.key.startsWith(`${customer.attributes.key}Quote`))
.map((cart) => cart.attributes.data.uuid);

return {
Expand All @@ -50,7 +50,7 @@ export class CartFixture extends AbstractFixture {
return { customerEmail, idCart: cartIds[cartIndex] };
}

_getCustomersWithCartsPayload() {
_getCustomersWithQuotesPayload() {
let companyPermissions = [];
let baseOperations = [
{
Expand Down Expand Up @@ -113,12 +113,30 @@ export class CartFixture extends AbstractFixture {
key: 'permission3',
arguments: ['RemoveCartItemPermissionPlugin'],
},
{
type: 'helper',
name: 'havePermissionByKey',
key: 'permission4',
arguments: ['PlaceOrderWithAmountUpToPermissionPlugin'],
},
{
type: 'helper',
name: 'havePermissionByKey',
key: 'permission5',
arguments: ['PlaceOrderPermissionPlugin'],
},
{
type: 'helper',
name: 'havePermissionByKey',
key: 'permission6',
arguments: ['SeeBusinessUnitOrdersPermissionPlugin'],
},
{
type: 'helper',
name: 'haveCompanyRoleWithPermissions',
arguments: [
{ isDefault: true, fkCompany: '#company.id_company' },
['#permission1', '#permission2', '#permission3'],
['#permission1', '#permission2', '#permission3', '#permission4', '#permission5', '#permission6'],
],
},
];
Expand Down
4 changes: 4 additions & 0 deletions src/resources/carts.resource.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ export default class CartsResource extends AbstractResource {
return this.getRequest(`carts/${idCart}`);
}

getWithItems(idCart) {
return this.getRequest(`carts/${idCart}?include=items`);
}

_getCreateCartPayload(cartName, isDefault = false) {
return {
data: {
Expand Down
49 changes: 49 additions & 0 deletions src/tests/cart/SAPI5_cart_with_item_1.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { group } from 'k6';
import OptionsUtil from '../../utils/options.util';
import { createMetrics } from '../../utils/metric.util';
import EnvironmentUtil from '../../utils/environment.util';
import { CartFixture } from '../../fixtures/cart.fixture';
import AuthUtil from '../../utils/auth.util';
import CartsResource from '../../resources/carts.resource';

const testConfiguration = {
...EnvironmentUtil.getDefaultTestConfiguration(),
id: 'SAPI5',
group: 'Cart',
metrics: ['SAPI5_get_carts_with_items'],
thresholds: {
SAPI5_get_carts_with_items: {
smoke: ['avg<600'],
load: ['avg<1200'],
},
},
};

const { metrics, metricThresholds } = createMetrics(testConfiguration);
export const options = OptionsUtil.loadOptions(testConfiguration, metricThresholds);

export function setup() {
const dynamicFixture = new CartFixture({
customerCount: testConfiguration.vus,
cartCount: 1,
itemCount: 1,
});

return dynamicFixture.getData();
}

export default function (data) {
const { customerEmail, idCart } = CartFixture.iterateData(data);

let bearerToken;
group('Authorization', () => {
bearerToken = AuthUtil.getInstance().getBearerToken(customerEmail);
});

group(testConfiguration.group, () => {
const cartsResource = new CartsResource(bearerToken);
const response = cartsResource.getWithItems(idCart);

metrics[testConfiguration.metrics[0]].add(response.timings.duration);
});
}

0 comments on commit 4c5faf2

Please sign in to comment.