diff --git a/setup/performance-toolkit/README.md b/setup/performance-toolkit/README.md index 7bf7a1fbd4721..ede66e040753f 100644 --- a/setup/performance-toolkit/README.md +++ b/setup/performance-toolkit/README.md @@ -54,49 +54,139 @@ There are two JMeter scenarios located in `setup/performance-toolkit` folder: `b The following parameters can be passed to the `benchmark.jmx` scenario: +Main parameters: + | Parameter Name | Default Value | Description | | --------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------- | | host | localhost | URL component 'host' of application being tested (URL or IP). | | base_path | / | Base path for tested site. | +| files_folder | ./files/ | Path to various files that are used in scenario (`setup/performance-toolkit/files`). | +| request_protocol | http | Hypertext Transfer Protocol (http or https). | +| graphql_port_number | | Port number for GraphQL. | +| admin_password | 123123q | Admin backend password. | | admin_path | admin | Admin backend path. | | admin_user | admin | Admin backend user. | -| admin_password | 123123q | Admin backend password. | -| customer_password | 123123q | Storefront customer password. | -| customers_page_size | 50 | Page size for customers grid in Magento Admin. | -| files_folder | ./files/ | Path to various files that are used in scenario (`setup/performance-toolkit/files`). | +| cache_hits_percentage | 100 | Cache hits percentage. | +| seedForRandom | 1 | System option for setting random number method | | loops | 1 | Number of loops to run. | -| frontendPoolUsers | 1 | Total number of Frontend threads. | -| adminPoolUsers | 1 | Total number of Admin threads. | -| browseCatalogByGuestPercentage | 30 | Percentage of threads in Frontend Pool that emulate catalog browsing activities. | -| browseCatalogByCustomerPercentage | 0 | Percentage of threads in Frontend Pool that emulate catalog browsing activities. | -| siteSearchPercentage | 30 | Percentage of threads in Frontend Pool that emulate catalog search activities. | -| searchQuickPercentage | 60 | Percentage of threads in Frontend Pool that emulate catalog search activities. | -| searchQuickFilterPercentage | 30 | Percentage of threads in Frontend Pool that emulate catalog search activities. | -| searchAdvancedPercentage | 10 | Percentage of threads in Frontend Pool that emulate catalog search activities. | -| checkoutByGuestPercentage | 4 | Percentage of threads in Frontend Pool that emulate checkout by guest. | -| checkoutByCustomerPercentage | 4 | Percentage of threads in Frontend Pool that emulate checkout by customer. | -| addToCartByGuestPercentage | 28 | Percentage of threads in Frontend Pool that emulate abandoned cart activities. | -| addToWishlistPercentage | 2 | Percentage of threads in Frontend Pool that emulate adding products to Wishlist. | -| compareProductsPercentage | 2 | Percentage of threads in Frontend Pool that emulate products comparison. | -| productCompareDelay | 0 | Delay (s) between iterations of product comparison. | -| promotionRulesPercentage | 10 | Percentage of threads in Admin Pool that emulate creation of promotion rules. | -| adminPromotionsManagementDelay | 0 | Delay (s) between creation of promotion rules. | -| adminCategoryManagementPercentage | 10 | Percentage of threads in Merchandising Pool that emulate category management activities. | -| adminProductEditingPercentage | 35 | Percentage of threads in Merchandising Pool that emulate product editing. | -| adminProductCreationPercentage | 25 | Percentage of threads in Merchandising Pool that emulate creation of products. | -| adminPromotionRulesPercentage | 15 | Percentage of threads in Admin Pool that emulate admin rules creating activities. | -| adminCategoryManagementDelay | 0 | Delay (s) between iterations of category management activities. | -| apiProcessOrders | 5 | Number of orders for process in Admin API - Process Orders. | -| adminEditOrderPercentage | 15 | Percentage of threads in Admin Pool that emulate order edit. | -| csrPoolUsers | 0 | Users of Customer Support Request (CSR) Pool. | -| othersPoolUsers | 0 | Users of Others Pool. | -| browseCustomerGridPercentage | 10 | Percentage of threads in CSR Pool that emulate customers browsing activities. | -| adminCreateOrderPercentage | 70 | Percentage of threads in CSR Pool that emulate creation of orders. | -| adminReturnsManagementPercentage | 20 | Percentage of threads in CSR Pool that emulate creation/processing of returns. | -| adminCreateProcessReturnsDelay | 0 | Delay (s) between creation of returns. | -| wishlistDelay | 0 | Delay (s) between adding products to Wishlist. | -| categories_count | 100 | Total number of categories that are be used in scenario. | -| simple_products_count | 30 | Total number of simple products that are be used in scenario. | +| frontendPoolUsers | 0 | Total number of Frontend threads. | +| adminPoolUsers | 0 | Total number of Admin threads. | +| csrPoolUsers | 0 | Total number of CSR threads. | +| apiPoolUsers | 0 | Total number of API threads. | +| oneThreadScenariosPoolUsers | 0 | Total number of One Thread Scenarios threads. | +| graphQLPoolUsers | 0 | Total number of GraphQL threads. | +| combinedBenchmarkPoolUsers | 0 | Total number of Combined Benchmark threads. | + +Parameters for Frontend pool: + +| Parameter Name | Default Value | Description | +| --------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------- | +| browseCatalogByCustomerPercentage | 0 | Percentage of threads in Frontend Pool that emulate customer catalog browsing activities. | +| browseCatalogByGuestPercentage | 0 | Percentage of threads in Frontend Pool that emulate guest catalog browsing activities. | +| siteSearchPercentage | 0 | Percentage of threads in Frontend Pool that emulate catalog search activities. | +| addToCartByGuestPercentage | 0 | Percentage of threads in Frontend Pool that emulate abandoned cart activities by guest. | +| addToWishlistPercentage | 0 | Percentage of threads in Frontend Pool that emulate adding products to Wishlist. | +| compareProductsPercentage | 0 | Percentage of threads in Frontend Pool that emulate products comparison. | +| checkoutByGuestPercentage | 0 | Percentage of threads in Frontend Pool that emulate checkout by guest. | +| checkoutByCustomerPercentage | 0 | Percentage of threads in Frontend Pool that emulate checkout by customer. | +| reviewByCustomerPercentage | 0 | Percentage of threads in Frontend Pool that emulate reviewing products. | +| addToCartByCustomerPercentage | 0 | Percentage of threads in Frontend Pool that emulate abandoned cart activities by customer.| +| accountManagementPercentage | 0 | Percentage of threads in Frontend Pool that emulate account management. | + +Parameters for Admin pool: + +| Parameter Name | Default Value | Description | +| --------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------- | +| adminCMSManagementPercentage | 0 | Percentage of threads in Admin Pool that emulate CMS management activities. | +| browseProductGridPercentage | 0 | Percentage of threads in Admin Pool that emulate products grid browsing activities. | +| browseOrderGridPercentage | 0 | Percentage of threads in Admin Pool that emulate orders grid browsing activities. | +| adminProductCreationPercentage | 0 | Percentage of threads in Admin Pool that emulate product creation activities. | +| adminProductEditingPercentage | 0 | Percentage of threads in Admin Pool that emulate product editing activities. | + +Parameters for CSR pool: + +| Parameter Name | Default Value | Description | +| --------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------- | +| adminReturnsManagementPercentage | 0 | Percentage of threads in CSR Pool that emulate admin returns management activities. | +| browseCustomerGridPercentage | 0 | Percentage of threads in CSR Pool that emulate customers grid browsing activities. | +| adminCreateOrderPercentage | 0 | Percentage of threads in CSR Pool that emulate creating orders activities. | + +Parameters for API pool: + +| Parameter Name | Default Value | Description | +| --------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------- | +| apiBasePercentage | 0 | Percentage of threads in API Pool that emulate API requests activities. | + +Parameters for One Thread Scenarios pool: + +| Parameter Name | Default Value | Description | +| --------------------------------------------- | ------------------- | ----------------------------------------------------------------------------- | +| productGridMassActionPercentage | 0 | Percentage of threads that emulate product mass action activities. | +| importProductsPercentage | 0 | Percentage of threads that emulate products import activities. | +| importCustomersPercentage | 0 | Percentage of threads that emulate customers import activities. | +| exportProductsPercentage | 0 | Percentage of threads that emulate products export activities. | +| exportCustomersPercentage | 0 | Percentage of threads that emulate customers export activities. | +| apiSinglePercentage | 0 | Percentage of threads that emulate API nonparallel requests activities. | +| adminCategoryManagementPercentage | 0 | Percentage of threads that emulate category management activities. | +| adminPromotionRulesPercentage | 0 | Percentage of threads that emulate promotion rules activities. | +| adminCustomerManagementPercentage | 0 | Percentage of threads that emulate customer management activities. | +| adminEditOrderPercentage | 0 | Percentage of threads that emulate edit order activities. | +| catalogGraphQLPercentage | 0 | Percentage of threads that emulate nonparallel catalogGraphQL activities. | + +Parameters for GraphQL pool: + +| Parameter Name | Default Value | Description | +| ----------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------- | +| graphqlGetListOfProductsByCategoryIdPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetSimpleProductDetailsByProductUrlKeyPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetSimpleProductDetailsByNamePercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetConfigurableProductDetailsByProductUrlKeyPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetConfigurableProductDetailsByNamePercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetProductSearchByTextAndCategoryIdPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetCategoryListByCategoryIdPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlUrlInfoByUrlKeyPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetCmsPageByIdPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetNavigationMenuByCategoryIdPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlCreateEmptyCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlGetEmptyCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlSetShippingAddressOnCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlSetBillingAddressOnCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlAddSimpleProductToCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlAddConfigurableProductToCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlUpdateSimpleProductQtyInCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlUpdateConfigurableProductQtyInCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlRemoveSimpleProductFromCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlRemoveConfigurableProductFromCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlApplyCouponToCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlRemoveCouponFromCartPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlCatalogBrowsingByGuestPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | +| graphqlCheckoutByGuestPercentage | 0 | Percentage of threads in GraphQL Pool that emulate GraphQL requests activities. | + +Parameters for Combined Benchmark pool: + +| Parameter Name | Default Value | Description | +| ----------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------- | +| cBrowseCatalogByGuestPercentage | 29 | Percentage of threads in Combined Benchmark Pool that emulate customer catalog browsing activities. | +| cSiteSearchPercentage | 29 | Percentage of threads in Combined Benchmark Pool that emulate catalog search activities. | +| cAddToCartByGuestPercentage | 26 | Percentage of threads in Combined Benchmark Pool that emulate abandoned cart activities. | +| cAddToWishlistPercentage | 1.5 | Percentage of threads in Combined Benchmark Pool that emulate adding products to Wishlist. | +| cCompareProductsPercentage | 1.5 | Percentage of threads in Combined Benchmark Pool that emulate products comparison. | +| cCheckoutByGuestPercentage | 3.5 | Percentage of threads in Combined Benchmark Pool that emulate checkout by guest. | +| cCheckoutByCustomerPercentage | 3.5 | Percentage of threads in Combined Benchmark Pool that emulate checkout by customer. | +| cAccountManagementPercentage | 1 | Percentage of threads in Combined Benchmark Pool that emulate account management. | +| cAdminCMSManagementPercentage | 0.35 | Percentage of threads in Combined Benchmark Pool that emulate CMS management activities. | +| cAdminBrowseProductGridPercentage | 0.2 | Percentage of threads in Combined Benchmark Pool that emulate products grid browsing activities. | +| cAdminBrowseOrderGridPercentage | 0.2 | Percentage of threads in Combined Benchmark Pool that emulate orders grid browsing activities. | +| cAdminProductCreationPercentage | 0.5 | Percentage of threads in Combined Benchmark Pool that emulate product creation activities. | +| cAdminProductEditingPercentage | 0.65 | Percentage of threads in Combined Benchmark Pool that emulate product editing activities. | +| cAdminReturnsManagementPercentage | 0.75 | Percentage of threads in Combined Benchmark Pool that emulate admin returns management activities. | +| cAdminBrowseCustomerGridPercentage | 0.1 | Percentage of threads in Combined Benchmark Pool that emulate customers grid browsing activities. | +| cAdminCreateOrderPercentage | 0.5 | Percentage of threads in Combined Benchmark Pool that emulate creating orders activities. | +| cAdminCategoryManagementPercentage | 0.15 | Percentage of threads in Combined Benchmark Pool that emulate admin category management activities. | +| cAdminPromotionRulesPercentage | 0.2 | Percentage of threads in Combined Benchmark Pool that emulate admin promotion rules activities. | +| cAdminCustomerManagementPercentage | 0.4 | Percentage of threads in Combined Benchmark Pool that emulate admin customers management activities. | +| cAdminEditOrderPercentage | 1 | Percentage of threads in Combined Benchmark Pool that emulate admin edit order activities. | + Parameters must be passed to the command line with the `J` prefix: @@ -113,10 +203,17 @@ There are some options that you should pass to JMeter in the console mode: To get more details about available JMeter options, read [Non-GUI Mode](http://jmeter.apache.org/usermanual/get-started.html#non_gui). -For example, you can run the B2C scenario via console with 90 threads for the Frontend Pool and 10 threads for the Admin Pool: +For example, you can run the B2C scenario via console with: +90 threads for the Frontend Pool where: +- 80% - guest catalog browsing activities. +- 20% - checkout by customer. + +10 threads for the Admin Pool where: +- 10% - admin products grid browsing activities. +- 90% - admin product creation activities. cd {JMeter path}/bin/ - jmeter -n -t {path to performance toolkit}/benchmark.jmx -j ./jmeter.log -l ./jmeter-results.jtl -Jhost=magento2.dev -Jbase_path=/ -Jadmin_path=admin -JfrontendPoolUsers=90 -JadminPoolUsers=10 + jmeter -n -t {path to performance toolkit}/benchmark.jmx -j ./jmeter.log -l ./jmeter-results.jtl -Jhost=magento2.dev -Jbase_path=/ -Jadmin_path=admin -JfrontendPoolUsers=90 -JadminPoolUsers=10 -JbrowseCatalogByGuestPercentage=80 -JcheckoutByCustomerPercentage=20 -JbrowseProductGridPercentage=10 -JadminProductCreationPercentage=90 As a result, you will get `jmeter.log` and `jmeter-results.jtl`. The`jmeter.log` contains information about the test run and can be helpful in determining the cause of an error. The JTL file is a text file containing the results of a test run. It can be opened in the GUI mode to perform analysis of the results (see the *Output* section below). @@ -190,42 +287,21 @@ For more details, read [Summary Report](http://jmeter.apache.org/usermanual/comp ### Scenarios -`benchmark.jmx` scenario has the following pools and default percentage breakdown for each scenario: +`benchmark.jmx` scenario has the following pools: **Frontend Pool** (frontendPoolUsers) -| Scenario Name | % of Pool | -| ------------------------- | --------- | -| Catalog Browsing By Guest | 30 | -| Site Search | 30 | -| Add To Cart By Guest | 28 | -| Add to Wishlist | 2 | -| Compare Products | 2 | -| Checkout By Guest | 4 | -| Checkout By Customer | 4 | - -Site Search thread group contains 3 variations: -- Quick Search (60%) -- Quick Search With Filtration (30%) -- Advanced Search (10%) - **Admin Pool** (adminPoolUsers) -| Scenario Name |% of Pool | -| ----------------------------| --------- | -| Admin Promotion Rules | 15 | -| Admin Edit Order | 15 | -| Admin Category Management | 10 | -| Admin Edit Product | 35 | -| Admin Create Product | 25 | - **CSR Pool** (csrPoolUsers) -| Scenario Name | % of Pool | -| -------------------------- | --------- | -| Browse Customer Grid | 10 | -| Admin Create Order | 70 | -| Admin Returns Management | 20 | +**API Pool** (apiPoolUsers) + +**One Thread Scenarios Pool** (oneThreadScenariosPoolUsers) + +**GraphQL Pool** (graphQLPoolUsers) + +**Combined Benchmark Pool** (combinedBenchmarkPoolUsers) **Legacy Threads** diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index a8a7e419373b8..c2e64b9c244b8 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -54,6 +54,11 @@ ${__P(admin_user,admin)} = + + cache_hits_percentage + ${__P(cache_hits_percentage,100)} + = + seedForRandom ${__P(seedForRandom,1)} @@ -64,6 +69,41 @@ ${__P(loops,1)} = + + frontendPoolUsers + ${__P(frontendPoolUsers,0)} + = + + + adminPoolUsers + ${__P(adminPoolUsers,0)} + = + + + csrPoolUsers + ${__P(csrPoolUsers,0)} + = + + + apiPoolUsers + ${__P(apiPoolUsers,0)} + = + + + oneThreadScenariosPoolUsers + ${__P(oneThreadScenariosPoolUsers,0)} + = + + + graphQLPoolUsers + ${__P(graphQLPoolUsers,0)} + = + + + combinedBenchmarkPoolUsers + ${__P(combinedBenchmarkPoolUsers,0)} + = + accountManagementPercentage ${__P(accountManagementPercentage,0)} @@ -76,12 +116,12 @@ addToCartByGuestPercentage - ${__P(addToCartByGuestPercentage,28)} + ${__P(addToCartByGuestPercentage,0)} = addToWishlistPercentage - ${__P(addToWishlistPercentage,2)} + ${__P(addToWishlistPercentage,0)} = @@ -106,12 +146,12 @@ adminCategoryManagementPercentage - ${__P(adminCategoryManagementPercentage,10)} + ${__P(adminCategoryManagementPercentage,0)} = adminCreateOrderPercentage - ${__P(adminCreateOrderPercentage,70)} + ${__P(adminCreateOrderPercentage,0)} = @@ -134,19 +174,9 @@ ${__P(adminCustomerManagementPercentage,0)} = - - adminEditOrder - ${__P(adminEditOrder,0)} - = - adminEditOrderPercentage - ${__P(adminEditOrderPercentage,15)} - = - - - adminEditProduct - ${__P(adminEditProduct,0)} + ${__P(adminEditOrderPercentage,0)} = @@ -169,24 +199,19 @@ ${__P(adminImportProductFilePath,import_products/product_import_append_1.csv)} = - - adminPoolUsers - ${__P(adminPoolUsers,1)} - = - adminProductCreationPercentage - ${__P(adminProductCreationPercentage,25)} + ${__P(adminProductCreationPercentage,0)} = adminProductEditingPercentage - ${__P(adminProductEditingPercentage,35)} + ${__P(adminProductEditingPercentage,0)} = adminPromotionRulesPercentage - ${__P(adminPromotionRulesPercentage,15)} + ${__P(adminPromotionRulesPercentage,0)} = @@ -201,7 +226,7 @@ adminReturnsManagementPercentage - ${__P(adminReturnsManagementPercentage,20)} + ${__P(adminReturnsManagementPercentage,0)} = @@ -234,16 +259,16 @@ ${__P(apiOrderInvoiceShipmentSync,0)} = - - apiPoolUsers - ${__P(apiPoolUsers,0)} - = - apiProcessOrders ${__P(apiProcessOrders,1)} = + + apiSinglePercentage + ${__P(apiSinglePercentage,0)} + = + bamboo_build_number ${__P(bamboo_build_number,)} @@ -256,12 +281,12 @@ browseCatalogByGuestPercentage - ${__P(browseCatalogByGuestPercentage,30)} + ${__P(browseCatalogByGuestPercentage,0)} = browseCustomerGridPercentage - ${__P(browseCustomerGridPercentage,10)} + ${__P(browseCustomerGridPercentage,0)} = @@ -274,9 +299,104 @@ ${__P(browseProductGridPercentage,0)} = - - cache_hits_percentage - ${__P(cache_hits_percentage,100)} + + cAccountManagementPercentage + ${__P(cAccountManagementPercentage,1)} + = + + + cAddToCartByGuestPercentage + ${__P(cAddToCartByGuestPercentage,26)} + = + + + cAddToWishlistPercentage + ${__P(cAddToWishlistPercentage,1.5)} + = + + + cAdminBrowseCustomerGridPercentage + ${__P(cAdminBrowseCustomerGridPercentage,0.1)} + = + + + cAdminBrowseOrderGridPercentage + ${__P(cAdminBrowseOrderGridPercentage,0.2)} + = + + + cAdminBrowseProductGridPercentage + ${__P(cAdminBrowseProductGridPercentage,0.2)} + = + + + cAdminCMSManagementPercentage + ${__P(cAdminCMSManagementPercentage,0.35)} + = + + + cAdminCategoryManagementPercentage + ${__P(cAdminCategoryManagementPercentage,0.15)} + = + + + cAdminCreateOrderPercentage + ${__P(cAdminCreateOrderPercentage,0.5)} + = + + + cAdminCustomerManagementPercentage + ${__P(cAdminCustomerManagementPercentage,0.4)} + = + + + cAdminEditOrderPercentage + ${__P(cAdminEditOrderPercentage,1)} + = + + + cAdminProductCreationPercentage + ${__P(cAdminProductCreationPercentage,0.5)} + = + + + cAdminProductEditingPercentage + ${__P(cAdminProductEditingPercentage,0.65)} + = + + + cAdminPromotionRulesPercentage + ${__P(cAdminPromotionRulesPercentage,0.2)} + = + + + cAdminReturnsManagementPercentage + ${__P(cAdminReturnsManagementPercentage,0.75)} + = + + + cBrowseCatalogByGuestPercentage + ${__P(cBrowseCatalogByGuestPercentage,29)} + = + + + cCheckoutByCustomerPercentage + ${__P(cCheckoutByCustomerPercentage,3.5)} + = + + + cCheckoutByGuestPercentage + ${__P(cCheckoutByGuestPercentage,3.5)} + = + + + cCompareProductsPercentage + ${__P(cCompareProductsPercentage,1.5)} + = + + + cSiteSearchPercentage + ${__P(cSiteSearchPercentage,29)} = @@ -291,17 +411,17 @@ checkoutByCustomerPercentage - ${__P(checkoutByCustomerPercentage,4)} + ${__P(checkoutByCustomerPercentage,0)} = checkoutByGuestPercentage - ${__P(checkoutByGuestPercentage,4)} + ${__P(checkoutByGuestPercentage,0)} = compareProductsPercentage - ${__P(compareProductsPercentage,2)} + ${__P(compareProductsPercentage,0)} = @@ -309,11 +429,6 @@ ${__P(configurable_products_count,15)} = - - csrPoolUsers - ${__P(csrPoolUsers,0)} - = - customer_checkout_percent ${__P(customer_checkout_percent,100)} @@ -334,11 +449,6 @@ ${__P(dashboard_enabled,0)} = - - deadLocksPoolUsers - ${__P(deadLocksPoolUsers,1)} - = - exportCustomersPercentage ${__P(exportCustomersPercentage,0)} @@ -354,16 +464,6 @@ ${__P(form_key,uVEW54r8kKday8Wk)} = - - frontendPoolUsers - ${__P(frontendPoolUsers,1)} - = - - - graphQLPoolUsers - ${__P(graphQLPoolUsers,1)} - = - graphqlAddConfigurableProductToCartPercentage ${__P(graphqlAddConfigurableProductToCartPercentage,0)} @@ -399,11 +499,6 @@ ${__P(graphqlGetCategoryListByCategoryIdPercentage,0)} = - - graphqlGetCmsBlockByIdentifierPercentage - ${__P(graphqlGetCmsBlockByIdentifierPercentage,0)} - = - graphqlGetCmsPageByIdPercentage ${__P(graphqlGetCmsPageByIdPercentage,0)} @@ -586,7 +681,7 @@ siteSearchPercentage - ${__P(siteSearchPercentage,30)} + ${__P(siteSearchPercentage,0)} = @@ -25634,7 +25729,7 @@ catch (java.lang.Exception e) { - + continue false @@ -27110,13 +27205,13 @@ if (testLabel - + continue false ${loops} - ${deadLocksPoolUsers} + ${oneThreadScenariosPoolUsers} ${ramp_period} 1505803944000 1505803944000 @@ -28161,7 +28256,7 @@ vars.put("adminImportFilePath", filepath); 1 false 1 - ${apiBasePercentage} + ${apiSinglePercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -44333,6 +44428,25754 @@ vars.put("coupon_code", coupons[number].code); + + + + + continue + + false + ${loops} + + ${combinedBenchmarkPoolUsers} + ${ramp_period} + 1505803944000 + 1505803944000 + false + + + mpaf/tool/fragments/_system/thread_group.jmx + + + javascript + + + + var cacheHitPercent = vars.get("cache_hits_percentage"); + +if ( + cacheHitPercent < 100 && + sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + doCache(); +} + +function doCache(){ + var random = Math.random() * 100; + if (cacheHitPercent < random) { + sampler.setPath(sampler.getPath() + "?cacheModifier=" + Math.random().toString(36).substring(2, 13)); + } +} + + mpaf/tool/fragments/ce/common/cache_hit_miss.jmx + + + + 1 + false + 1 + ${cBrowseCatalogByGuestPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Catalog Browsing By Guest"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; + +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} + +vars.putObject("randomIntGenerator", random); + + + + true + + + + + javascript + + + + random = vars.getObject("randomIntGenerator"); + +var categories = props.get("categories"); +number = random.nextInt(categories.length); + +vars.put("category_url_key", categories[number].url_key); +vars.put("category_name", categories[number].name); +vars.put("category_id", categories[number].id); +vars.putObject("category", categories[number]); + + mpaf/tool/fragments/ce/common/extract_category_setup.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${category_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_category.jmx + + + + <span class="base" data-ui-id="page-title">${category_name}</span> + + Assertion.response_data + false + 6 + + + + false + category_id + <li class="item category([^'"]+)">\s*<strong>${category_name}</strong>\s*</li> + $1$ + + 1 + simple_product_1_url_key + + + + + ^[0-9]+$ + + Assertion.response_data + false + 1 + variable + category_id + + + + + + true + 2 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + true + 1 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("configurable_products_list").size()); +product = props.get("configurable_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + 1 + false + 1 + ${cSiteSearchPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Site Search"); + + true + + + + + ${files_folder}search_terms.csv + UTF-8 + + , + false + true + false + shareMode.thread + mpaf/tool/fragments/ce/search/search_terms.jmx + + + + javascript + + + + var cacheHitPercent = vars.get("cache_hits_percentage"); + +if ( + cacheHitPercent < 100 && + sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + doCache(); +} + +function doCache(){ + var random = Math.random() * 100; + if (cacheHitPercent < random) { + sampler.setPath(sampler.getPath() + "?cacheModifier=" + Math.random().toString(36).substring(2, 13)); + } +} + + mpaf/tool/fragments/ce/common/cache_hit_miss.jmx + + + + 1 + false + 1 + ${searchQuickPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Quick Search"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + q + ${searchTerm} + = + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}catalogsearch/result/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/search/search_quick.jmx + + + + Search results for: + <span class="toolbar-number">\d<\/span> Items|Items <span class="toolbar-number">1 + + Assertion.response_data + false + 2 + + + + false + product_url_keys + <a class="product-item-link"(?s).+?href="(?:http|https)://${host}${base_path}(index.php/)?([^'"]+)${url_suffix}">(?s). + $2$ + + -1 + + + + false + isPageCacheable + catalogsearch/searchTermsLog/save + $0$ + 0 + 1 + + + + + + "${isPageCacheable}" != "0" + false + mpaf/tool/fragments/ce/search/if_page_cacheable_controller.jmx + + + + + + true + q + ${searchTerm} + = + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}catalogsearch/searchTermsLog/save/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/search/search_terms_log_save.jmx + + + + + "success":true + + Assertion.response_data + false + 2 + + + + + + + +foundProducts = Integer.parseInt(vars.get("product_url_keys_matchNr")); + +if (foundProducts > 3) { + foundProducts = 3; +} + +vars.put("foundProducts", String.valueOf(foundProducts)); + + + + true + mpaf/tool/fragments/ce/search/set_found_items.jmx + + + + true + ${foundProducts} + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + mpaf/tool/fragments/ce/search/searched_products_setup.jmx + +number = vars.get("_counter"); +product = vars.get("product_url_keys_"+number); + +vars.put("product_url_key", product); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + 1 + false + 1 + ${searchQuickFilterPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Quick Search With Filtration"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + q + ${searchTerm} + = + true + + + + + + 60000 + 200000 + + + ${base_path}catalogsearch/result/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/search/search_quick_filter.jmx + + + + Search results for: + Items <span class="toolbar-number">1 + + Assertion.response_data + false + 2 + + + + 0 + attribute_1_options_count + count((//div[@class="filter-options-content"])[1]//li[@class="item"]) + false + true + false + + + + 0 + attribute_2_options_count + count((//div[@class="filter-options-content"])[2]//li[@class="item"]) + false + true + false + + + + + attribute_1_filter_url + ((//div[@class="filter-options-content"])[1]//li[@class="item"]//a)[1]/@href + false + true + false + + + + false + product_url_keys + <a class="product-item-link"(?s).+?href="http://${host}${base_path}(index.php/)?([^'"]+)${url_suffix}">(?s). + $2$ + + -1 + + + + false + isPageCacheable + catalogsearch/searchTermsLog/save + $0$ + 0 + 1 + + + + + + "${isPageCacheable}" != "0" + false + mpaf/tool/fragments/ce/search/if_page_cacheable_controller.jmx + + + + + + true + q + ${searchTerm} + = + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}catalogsearch/searchTermsLog/save/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/search/search_terms_log_save.jmx + + + + + "success":true + + Assertion.response_data + false + 2 + + + + + + + ${attribute_1_options_count} > 0 + false + mpaf/tool/fragments/ce/search/search_quick_filter-first-attribute.jmx + + + vars.put("search_url", vars.get("attribute_1_filter_url")); + + + false + + + + + + + + + 60000 + 200000 + + + ${attribute_1_filter_url} + GET + true + false + true + false + false + + + + + + Search results for: + <span class="toolbar-number">[1-9]+ + + Assertion.response_data + false + 2 + + + + 0 + attribute_2_options_count + count((//div[@class="filter-options-content"])[2]//li[@class="item"]) + false + true + false + + + + + attribute_2_filter_url + ((//div[@class="filter-options-content"])[2]//li[@class="item"]//a)[1]/@href + false + true + false + + + + false + product_url_keys + <a class="product-item-link"(?s).+?href="http://${host}${base_path}(index.php/)?([^'"]+)${url_suffix}">(?s). + $2$ + + -1 + + + + + + + ${attribute_2_options_count} > 0 + false + mpaf/tool/fragments/ce/search/search_quick_filter-second-attribute.jmx + + + vars.put("search_url", vars.get("attribute_2_filter_url")); + + + false + + + + + + + + + 60000 + 200000 + + + ${attribute_2_filter_url} + GET + true + false + true + false + false + + + + + + Search results for: + <span class="toolbar-number">[1-9]+ + + Assertion.response_data + false + 2 + + + + false + product_url_keys + <a class="product-item-link"(?s).+?href="http://${host}${base_path}(index.php/)?([^'"]+)${url_suffix}">(?s). + $2$ + + -1 + + + + + + + +foundProducts = Integer.parseInt(vars.get("product_url_keys_matchNr")); + +if (foundProducts > 3) { + foundProducts = 3; +} + +vars.put("foundProducts", String.valueOf(foundProducts)); + + + + true + mpaf/tool/fragments/ce/search/set_found_items.jmx + + + + true + ${foundProducts} + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + mpaf/tool/fragments/ce/search/searched_products_setup.jmx + +number = vars.get("_counter"); +product = vars.get("product_url_keys_"+number); + +vars.put("product_url_key", product); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + 1 + false + 1 + ${searchAdvancedPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Advanced Search"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + + 60000 + 200000 + + + ${base_path}catalogsearch/advanced/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/search/open_advanced_search_page.jmx + + + + <title>Advanced Search</title> + + Assertion.response_data + false + 2 + + + + + attribute_name + (//select[@class="multiselect"])[last()]/@name + false + true + false + + + + 0 + attribute_options_count + count((//select[@class="multiselect"])[last()]/option) + false + true + false + + + + + attribute_value + ((//select[@class="multiselect"])[last()]/option)[1]/@value + false + true + false + + + + + + + + + + + true + name + + = + true + + + true + sku + + = + true + + + true + description + ${searchTerm} + = + true + + + true + short_description + + = + true + + + true + price%5Bfrom%5D + + = + true + + + true + price%5Bto%5D + ${priceTo} + = + true + + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}catalogsearch/advanced/result/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/search/search_advanced.jmx + + + + items</strong> were found using the following search criteria + + Assertion.response_data + false + 2 + + + + false + product_url_keys + <a class="product-item-link"(?s).+?href="(?:http|https)://${host}${base_path}(index.php/)?([^'"]+)${url_suffix}">(?s). + $2$ + + -1 + + + + + + +foundProducts = Integer.parseInt(vars.get("product_url_keys_matchNr")); + +if (foundProducts > 3) { + foundProducts = 3; +} + +vars.put("foundProducts", String.valueOf(foundProducts)); + + + + true + mpaf/tool/fragments/ce/search/set_found_items.jmx + + + + true + ${foundProducts} + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + mpaf/tool/fragments/ce/search/searched_products_setup.jmx + +number = vars.get("_counter"); +product = vars.get("product_url_keys_"+number); + +vars.put("product_url_key", product); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + + + 1 + false + 1 + ${cAddToCartByGuestPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Add To Cart By Guest"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; + +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} + +vars.putObject("randomIntGenerator", random); + + + + true + + + + + mpaf/tool/fragments/ce/common/init_total_products_in_cart_setup.jmx + +vars.put("totalProductsAdded", "0"); + + + + true + + + + + javascript + + + + random = vars.getObject("randomIntGenerator"); + +var categories = props.get("categories"); +number = random.nextInt(categories.length); + +vars.put("category_url_key", categories[number].url_key); +vars.put("category_name", categories[number].name); +vars.put("category_id", categories[number].id); +vars.putObject("category", categories[number]); + + mpaf/tool/fragments/ce/common/extract_category_setup.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${category_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_category.jmx + + + + <span class="base" data-ui-id="page-title">${category_name}</span> + + Assertion.response_data + false + 6 + + + + false + category_id + <li class="item category([^'"]+)">\s*<strong>${category_name}</strong>\s*</li> + $1$ + + 1 + simple_product_1_url_key + + + + + ^[0-9]+$ + + Assertion.response_data + false + 1 + variable + category_id + + + + + + true + 2 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${product_id} + = + true + product + + + true + + = + true + related_product + + + true + 1 + = + true + qty + + + true + ${form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/cart/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_product_add_to_cart.jmx + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + + + true + cart,messages + = + true + sections + + + true + true + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/load_cart_section.jmx + + + + You added ${product_name} to your shopping cart. + + Assertion.response_data + false + 2 + + + + + This product is out of stock. + + Assertion.response_data + false + 6 + + + + + \"summary_count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + true + 1 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("configurable_products_list").size()); +product = props.get("configurable_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + true + 1 + mpaf/tool/fragments/ce/common/get_configurable_product_options.jmx + + + + + Content-Type + application/json + + + Accept + */* + + + + + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/integration/admin/token + POST + true + false + true + false + false + + + + + admin_token + $ + + + BODY + + + + + ^[a-z0-9-]+$ + + Assertion.response_data + false + 1 + variable + admin_token + + + + + + + Authorization + Bearer ${admin_token} + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/configurable-products/${product_sku}/options/all + GET + true + false + true + false + false + + + + + attribute_ids + $.[*].attribute_id + NO_VALUE + + BODY + + + + option_values + $.[*].values[0].value_index + NO_VALUE + + BODY + + + + + + + + + + true + ${product_id} + = + true + product + + + true + + = + true + related_product + + + true + 1 + = + true + qty + + + true + ${form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/cart/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_product_add_to_cart.jmx + + + false + + + + try { + attribute_ids = vars.get("attribute_ids"); + option_values = vars.get("option_values"); + attribute_ids = attribute_ids.replace("[","").replace("]","").replace("\"", ""); + option_values = option_values.replace("[","").replace("]","").replace("\"", ""); + attribute_ids_array = attribute_ids.split(","); + option_values_array = option_values.split(","); + args = ctx.getCurrentSampler().getArguments(); + it = args.iterator(); + while (it.hasNext()) { + argument = it.next(); + if (argument.getStringValue().contains("${")) { + args.removeArgument(argument.getName()); + } + } + for (int i = 0; i < attribute_ids_array.length; i++) { + ctx.getCurrentSampler().addArgument("super_attribute[" + attribute_ids_array[i] + "]", option_values_array[i]); + } + } catch (Exception e) { + log.error("eror…", e); + } + + mpaf/tool/fragments/ce/common/configurable_product_add_to_cart_preprocessor.jmx + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + + + true + cart,messages + = + true + sections + + + true + true + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/load_cart_section.jmx + + + + You added ${product_name} to your shopping cart. + + Assertion.response_data + false + 2 + + + + + This product is out of stock. + + Assertion.response_data + false + 6 + + + + + \"summary_count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + + + 1 + false + 1 + ${cAddToWishlistPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Add to Wishlist"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; + +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} + +vars.putObject("randomIntGenerator", random); + + + + true + + + + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_customer_email.jmx + +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("customer_email", customerUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/login/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_login_page.jmx + + + + <title>Customer Login</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + + + true + ${customer_email} + = + true + login[username] + + + true + ${customer_password} + = + true + login[password] + + + true + + = + true + send + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/loginPost/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/common/login.jmx + + + + <title>My Account</title> + + Assertion.response_data + false + 2 + + + + false + addressId + customer/address/edit/id/([^'"]+)/ + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + addressId + + + + + + + + true + + = + true + sections + + + true + false + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + + + + + true + 5 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + false + + + true + ${product_uenc} + = + true + uenc + + + true + ${product_id} + = + true + product + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}wishlist/index/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/wishlist/add_to_wishlist.jmx + + + + <title>My Wish List</title> + + Assertion.response_data + false + 16 + + + + false + wishListItems + data-post-remove='\{"action":"(.+)\/wishlist\\/index\\/remove\\/","data":\{"item":"([^"]+)" + $2$ + + -1 + + + + + + + + + true + wishlist,messages + = + true + sections + + + true + false + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/wishlist/load_wishlist_section.jmx + + + + {"wishlist":{"counter":" + + Assertion.response_data + false + 16 + + + + ${wishlistDelay}*1000 + + + + + + + wishListItems + wishListItem + true + mpaf/tool/fragments/ce/wishlist/clear_wishlist.jmx + + + 1 + 5 + 1 + counter + + true + true + + + + + + + true + ${form_key} + = + true + form_key + true + + + true + ${wishListItem} + = + true + item + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}wishlist/index/remove/ + POST + true + false + true + false + false + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/logout.jmx + + + + You are signed out. + + Assertion.response_data + false + 2 + + + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cCompareProductsPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Compare Products"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; + +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} + +vars.putObject("randomIntGenerator", random); + + + + true + + + + + mpaf/tool/fragments/ce/common/init_total_products_in_cart_setup.jmx + +vars.put("totalProductsAdded", "0"); + + + + true + + + + + javascript + + + + random = vars.getObject("randomIntGenerator"); + +var categories = props.get("categories"); +number = random.nextInt(categories.length); + +vars.put("category_url_key", categories[number].url_key); +vars.put("category_name", categories[number].name); +vars.put("category_id", categories[number].id); +vars.putObject("category", categories[number]); + + mpaf/tool/fragments/ce/common/extract_category_setup.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${category_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_compare/open_category.jmx + + + + <span class="base" data-ui-id="page-title">${category_name}</span> + + Assertion.response_data + false + 6 + + + + false + random_product_compare_id + catalog\\/product_compare\\/add\\/\",\"data\":\{\"product\":\"([0-9]+)\" + $1$ + + 1 + + + + + ^[0-9]+$ + + Assertion.response_data + false + 1 + variable + random_product_compare_id + + + + + + true + 2 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${product_id} + = + true + product + + + true + ${form_key} + = + true + form_key + + + true + ${product_uenc} + = + true + uenc + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}catalog/product_compare/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_compare/product_compare_add.jmx + + + + + + + true + compare-products,messages + = + true + sections + + + true + false + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_compare/customer_section_load_product_compare_add.jmx + + + + \"compare-products\":{\"count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + true + 1 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("configurable_products_list").size()); +product = props.get("configurable_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${product_id} + = + true + product + + + true + ${form_key} + = + true + form_key + + + true + ${product_uenc} + = + true + uenc + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}catalog/product_compare/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_compare/product_compare_add.jmx + + + + + + + true + compare-products,messages + = + true + sections + + + true + false + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_compare/customer_section_load_product_compare_add.jmx + + + + \"compare-products\":{\"count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}catalog/product_compare/index/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_compare/compare_products.jmx + + + + 1 + 0 + ${__javaScript(Math.round(${productCompareDelay}*1000))} + mpaf/tool/fragments/ce/product_compare/compare_products_pause.jmx + + + + + + + true + ${form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}catalog/product_compare/clear + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_compare/compare_products_clear.jmx + + + + + + 1 + false + 1 + ${cCheckoutByGuestPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Checkout By Guest"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; + +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} + +vars.putObject("randomIntGenerator", random); + + + + true + + + + + mpaf/tool/fragments/ce/common/init_total_products_in_cart_setup.jmx + +vars.put("totalProductsAdded", "0"); + + + + true + + + + + javascript + + + + random = vars.getObject("randomIntGenerator"); + +var categories = props.get("categories"); +number = random.nextInt(categories.length); + +vars.put("category_url_key", categories[number].url_key); +vars.put("category_name", categories[number].name); +vars.put("category_id", categories[number].id); +vars.putObject("category", categories[number]); + + mpaf/tool/fragments/ce/common/extract_category_setup.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${category_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_category.jmx + + + + <span class="base" data-ui-id="page-title">${category_name}</span> + + Assertion.response_data + false + 6 + + + + false + category_id + <li class="item category([^'"]+)">\s*<strong>${category_name}</strong>\s*</li> + $1$ + + 1 + simple_product_1_url_key + + + + + ^[0-9]+$ + + Assertion.response_data + false + 1 + variable + category_id + + + + + + true + 2 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${product_id} + = + true + product + + + true + + = + true + related_product + + + true + 1 + = + true + qty + + + true + ${form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/cart/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_product_add_to_cart.jmx + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + + + true + cart,messages + = + true + sections + + + true + true + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/load_cart_section.jmx + + + + You added ${product_name} to your shopping cart. + + Assertion.response_data + false + 2 + + + + + This product is out of stock. + + Assertion.response_data + false + 6 + + + + + \"summary_count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + true + 1 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("configurable_products_list").size()); +product = props.get("configurable_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + true + 1 + mpaf/tool/fragments/ce/common/get_configurable_product_options.jmx + + + + + Content-Type + application/json + + + Accept + */* + + + + + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/integration/admin/token + POST + true + false + true + false + false + + + + + admin_token + $ + + + BODY + + + + + ^[a-z0-9-]+$ + + Assertion.response_data + false + 1 + variable + admin_token + + + + + + + Authorization + Bearer ${admin_token} + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/configurable-products/${product_sku}/options/all + GET + true + false + true + false + false + + + + + attribute_ids + $.[*].attribute_id + NO_VALUE + + BODY + + + + option_values + $.[*].values[0].value_index + NO_VALUE + + BODY + + + + + + + + + + true + ${product_id} + = + true + product + + + true + + = + true + related_product + + + true + 1 + = + true + qty + + + true + ${form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/cart/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_product_add_to_cart.jmx + + + false + + + + try { + attribute_ids = vars.get("attribute_ids"); + option_values = vars.get("option_values"); + attribute_ids = attribute_ids.replace("[","").replace("]","").replace("\"", ""); + option_values = option_values.replace("[","").replace("]","").replace("\"", ""); + attribute_ids_array = attribute_ids.split(","); + option_values_array = option_values.split(","); + args = ctx.getCurrentSampler().getArguments(); + it = args.iterator(); + while (it.hasNext()) { + argument = it.next(); + if (argument.getStringValue().contains("${")) { + args.removeArgument(argument.getName()); + } + } + for (int i = 0; i < attribute_ids_array.length; i++) { + ctx.getCurrentSampler().addArgument("super_attribute[" + attribute_ids_array[i] + "]", option_values_array[i]); + } + } catch (Exception e) { + log.error("eror…", e); + } + + mpaf/tool/fragments/ce/common/configurable_product_add_to_cart_preprocessor.jmx + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + + + true + cart,messages + = + true + sections + + + true + true + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/load_cart_section.jmx + + + + You added ${product_name} to your shopping cart. + + Assertion.response_data + false + 2 + + + + + This product is out of stock. + + Assertion.response_data + false + 6 + + + + + \"summary_count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + javascript + + + + + vars.put("alabama_region_id", props.get("alabama_region_id")); + vars.put("california_region_id", props.get("california_region_id")); + + mpaf/tool/fragments/ce/common/get_region_data.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/guest_checkout/checkout_start.jmx + + + + <title>Checkout</title> + + Assertion.response_data + false + 2 + + + + + <title>Shopping Cart</title> + + Assertion.response_data + false + 6 + + + + false + cart_id + "quoteData":{"entity_id":"([^'"]+)", + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + cart_id + + + + + + true + + + + false + {"customerEmail":"test@example.com"} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/default/V1/customers/isEmailAvailable + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/guest_checkout/checkout_email_available.jmx + + + + + Referer + ${base_path}checkout/onepage/ + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + true + + Assertion.response_data + false + 8 + + + + + + true + + + + false + {"address":{"country_id":"US","postcode":"95630"}} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/default/V1/guest-carts/${cart_id}/estimate-shipping-methods + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/guest_checkout/checkout_estimate_shipping_methods_with_postal_code.jmx + + + + + Referer + ${base_path}checkout/onepage/ + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + "available":true + + Assertion.response_data + false + 2 + + + + + + true + + + + false + {"addressInformation":{"shipping_address":{"countryId":"US","regionId":"${california_region_id}","regionCode":"CA","region":"California","street":["10441 Jefferson Blvd ste 200"],"company":"","telephone":"3109450345","fax":"","postcode":"90232","city":"Culver City","firstname":"Name","lastname":"Lastname"},"shipping_method_code":"flatrate","shipping_carrier_code":"flatrate"}} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/default/V1/guest-carts/${cart_id}/shipping-information + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/guest_checkout/checkout_billing_shipping_information.jmx + + + + + Referer + ${base_path}checkout/onepage/ + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + {"payment_methods": + + Assertion.response_data + false + 2 + + + + + + true + + + + false + {"cartId":"${cart_id}","email":"test@example.com","paymentMethod":{"method":"checkmo","po_number":null,"additional_data":null},"billingAddress":{"countryId":"US","regionId":"${california_region_id}","regionCode":"CA","region":"California","street":["10441 Jefferson Blvd ste 200"],"company":"","telephone":"3109450345","fax":"","postcode":"90232","city":"Culver City","firstname":"Name","lastname":"Lastname"}} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/default/V1/guest-carts/${cart_id}/payment-information + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/guest_checkout/checkout_payment_info_place_order.jmx + + + + + Referer + ${base_path}checkout/onepage/ + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + "[0-9]+" + + Assertion.response_data + false + 2 + + + + order_id + $ + + + BODY + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_id + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/onepage/success/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/guest_checkout/checkout_success.jmx + + + + Thank you for your purchase! + Your order # is + + Assertion.response_data + false + 2 + + + + + + + + + 1 + false + 1 + ${cCheckoutByCustomerPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Checkout By Customer"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; + +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} + +vars.putObject("randomIntGenerator", random); + + + + true + + + + + mpaf/tool/fragments/ce/common/init_total_products_in_cart_setup.jmx + +vars.put("totalProductsAdded", "0"); + + + + true + + + + + javascript + + + + random = vars.getObject("randomIntGenerator"); + +var categories = props.get("categories"); +number = random.nextInt(categories.length); + +vars.put("category_url_key", categories[number].url_key); +vars.put("category_name", categories[number].name); +vars.put("category_id", categories[number].id); +vars.putObject("category", categories[number]); + + mpaf/tool/fragments/ce/common/extract_category_setup.jmx + + + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_customer_email.jmx + +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("customer_email", customerUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/login/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_login_page.jmx + + + + <title>Customer Login</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + + + true + ${customer_email} + = + true + login[username] + + + true + ${customer_password} + = + true + login[password] + + + true + + = + true + send + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/loginPost/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/common/login.jmx + + + + <title>My Account</title> + + Assertion.response_data + false + 2 + + + + false + addressId + customer/address/edit/id/([^'"]+)/ + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + addressId + + + + + + + + true + + = + true + sections + + + true + false + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${category_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_category.jmx + + + + <span class="base" data-ui-id="page-title">${category_name}</span> + + Assertion.response_data + false + 6 + + + + false + category_id + <li class="item category([^'"]+)">\s*<strong>${category_name}</strong>\s*</li> + $1$ + + 1 + simple_product_1_url_key + + + + + ^[0-9]+$ + + Assertion.response_data + false + 1 + variable + category_id + + + + + + true + 2 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${product_id} + = + true + product + + + true + + = + true + related_product + + + true + 1 + = + true + qty + + + true + ${form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/cart/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_product_add_to_cart.jmx + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + + + true + cart,messages + = + true + sections + + + true + true + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/load_cart_section.jmx + + + + You added ${product_name} to your shopping cart. + + Assertion.response_data + false + 2 + + + + + This product is out of stock. + + Assertion.response_data + false + 6 + + + + + \"summary_count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + true + 1 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("configurable_products_list").size()); +product = props.get("configurable_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + true + 1 + mpaf/tool/fragments/ce/common/get_configurable_product_options.jmx + + + + + Content-Type + application/json + + + Accept + */* + + + + + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/integration/admin/token + POST + true + false + true + false + false + + + + + admin_token + $ + + + BODY + + + + + ^[a-z0-9-]+$ + + Assertion.response_data + false + 1 + variable + admin_token + + + + + + + Authorization + Bearer ${admin_token} + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/configurable-products/${product_sku}/options/all + GET + true + false + true + false + false + + + + + attribute_ids + $.[*].attribute_id + NO_VALUE + + BODY + + + + option_values + $.[*].values[0].value_index + NO_VALUE + + BODY + + + + + + + + + + true + ${product_id} + = + true + product + + + true + + = + true + related_product + + + true + 1 + = + true + qty + + + true + ${form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/cart/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_product_add_to_cart.jmx + + + false + + + + try { + attribute_ids = vars.get("attribute_ids"); + option_values = vars.get("option_values"); + attribute_ids = attribute_ids.replace("[","").replace("]","").replace("\"", ""); + option_values = option_values.replace("[","").replace("]","").replace("\"", ""); + attribute_ids_array = attribute_ids.split(","); + option_values_array = option_values.split(","); + args = ctx.getCurrentSampler().getArguments(); + it = args.iterator(); + while (it.hasNext()) { + argument = it.next(); + if (argument.getStringValue().contains("${")) { + args.removeArgument(argument.getName()); + } + } + for (int i = 0; i < attribute_ids_array.length; i++) { + ctx.getCurrentSampler().addArgument("super_attribute[" + attribute_ids_array[i] + "]", option_values_array[i]); + } + } catch (Exception e) { + log.error("eror…", e); + } + + mpaf/tool/fragments/ce/common/configurable_product_add_to_cart_preprocessor.jmx + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + + + true + cart,messages + = + true + sections + + + true + true + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/load_cart_section.jmx + + + + You added ${product_name} to your shopping cart. + + Assertion.response_data + false + 2 + + + + + This product is out of stock. + + Assertion.response_data + false + 6 + + + + + \"summary_count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + javascript + + + + + vars.put("alabama_region_id", props.get("alabama_region_id")); + vars.put("california_region_id", props.get("california_region_id")); + + mpaf/tool/fragments/ce/common/get_region_data.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/customer_checkout/checkout_start.jmx + + + + <title>Checkout</title> + + Assertion.response_data + false + 2 + + + + + <title>Shopping Cart</title> + + Assertion.response_data + false + 6 + + + + false + cart_id + "quoteData":{"entity_id":"([^'"]+)", + $1$ + + 1 + + + + false + address_id + "default_billing":"([^'"]+)", + $1$ + + 1 + + + + false + customer_id + "customer_id":([^'",]+), + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + cart_id + + + + + [0-9]+$ + + Assertion.response_data + false + 1 + variable + address_id + + + + + [0-9]+$ + + Assertion.response_data + false + 1 + variable + customer_id + + + + + + true + + + + false + {"addressId":"${addressId}"} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/default/V1/carts/mine/estimate-shipping-methods-by-address-id + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/customer_checkout/checkout_estimate_shipping_methods.jmx + + + + + Referer + ${base_path}checkout/onepage/ + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + "available":true + + Assertion.response_data + false + 2 + + + + + + true + + + + false + {"addressInformation":{"shipping_address":{"customerAddressId":"${address_id}","countryId":"US","regionId":"${alabama_region_id}","regionCode":"AL","region":"Alabama","customerId":"${customer_id}","street":["123 Freedom Blvd. #123"],"telephone":"022-333-4455","postcode":"123123","city":"Fayetteville","firstname":"Anthony","lastname":"Nealy"},"shipping_method_code":"flatrate","shipping_carrier_code":"flatrate"}} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/default/V1/carts/mine/shipping-information + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/customer_checkout/checkout_billing_shipping_information.jmx + + + + + Referer + ${host}${base_path}checkout/onepage + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + {"payment_methods" + + Assertion.response_data + false + 2 + + + + + + true + + + + false + {"cartId":"${cart_id}","paymentMethod":{"method":"checkmo","po_number":null,"additional_data":null},"billingAddress":{"customerAddressId":"${address_id}","countryId":"US","regionId":"${alabama_region_id}","regionCode":"AL","region":"Alabama","customerId":"${customer_id}","street":["123 Freedom Blvd. #123"],"telephone":"022-333-4455","postcode":"123123","city":"Fayetteville","firstname":"Anthony","lastname":"Nealy"}} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/default/V1/carts/mine/payment-information + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/customer_checkout/checkout_payment_info_place_order.jmx + + + + + Referer + ${host}${base_path}checkout/onepage + + + Content-Type + application/json; charset=UTF-8 + + + Accept + application/json + + + X-Requested-With + XMLHttpRequest + + + + + + + "[0-9]+" + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}checkout/onepage/success/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/customer_checkout/checkout_success.jmx + + + + Thank you for your purchase! + Your order number is + + Assertion.response_data + false + 2 + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/logout.jmx + + + + You are signed out. + + Assertion.response_data + false + 2 + + + + + false + + + curSampler = ctx.getCurrentSampler(); +if(curSampler.getName().contains("Checkout success")) { + manager = curSampler.getCookieManager(); + manager.clear(); +} + + mpaf/tool/fragments/ce/customer_checkout/checkout_clear_cookie.jmx + + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAccountManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Account management"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_customer_email.jmx + +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("customer_email", customerUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/login/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_login_page.jmx + + + + <title>Customer Login</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + + + true + ${customer_email} + = + true + login[username] + + + true + ${customer_password} + = + true + login[password] + + + true + + = + true + send + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/loginPost/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/common/login.jmx + + + + <title>My Account</title> + + Assertion.response_data + false + 2 + + + + false + addressId + customer/address/edit/id/([^'"]+)/ + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + addressId + + + + + + + + true + + = + true + sections + + + true + false + = + true + force_new_section_timestamp + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}sales/order/history/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/my_orders.jmx + + + + <title>My Orders</title> + + Assertion.response_data + false + 2 + + + + false + orderId + sales/order/view/order_id/(\d+)/ + $1$ + NOT_FOUND + 1 + + + + + + mpaf/tool/fragments/ce/account_management/if_orders.jmx + "${orderId}" != "NOT_FOUND" + false + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}sales/order/view/order_id/${orderId} + GET + true + false + true + false + false + + + + + + <title>Order # + + Assertion.response_data + false + 2 + + + + false + shipment_tab + sales/order/shipment/order_id/(\d+)..Order Shipments + $1$ + NOT_FOUND + 1 + + + + + May not have shipped + "${shipment_tab}" != "NOT_FOUND" + false + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}sales/order/shipment/order_id/${orderId} + GET + true + false + true + false + false + + + + + + Track this shipment + + Assertion.response_data + false + 2 + + + + false + popupLink + popupWindow": {"windowURL":"([^'"]+)", + $1$ + + 1 + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${popupLink} + GET + true + false + true + false + false + + + + + + <title>Tracking Information</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}downloadable/customer/products + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/my_downloadable_products.jmx + + + + <title>My Downloadable Products</title> + + Assertion.response_data + false + 2 + + + + false + orderId + sales/order/view/order_id/(\d+)/ + $1$ + NOT_FOUND + 1 + + + + false + linkId + downloadable/download/link/id/(\d+)/ + $1$ + + 1 + + + + + + mpaf/tool/fragments/ce/account_management/if_downloadables.jmx + "${orderId}" != "NOT_FOUND" + false + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}sales/order/view/order_id/${orderId} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/view_downloadable_products.jmx + + + + <title>Order # + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}downloadable/download/link/id/${linkId} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/download_product.jmx + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}wishlist + GET + true + false + true + false + false + + + + + + <title>My Wish List</title> + + Assertion.response_data + false + 2 + + + + false + wishlistId + wishlist/index/update/wishlist_id/([^'"]+)/ + $1$ + + 1 + mpaf/tool/fragments/ce/account_management/my_wish_list.jmx + + + + false + buttonTitle + Update Wish List + FOUND + NOT_FOUND + 1 + + + + + + mpaf/tool/fragments/ce/account_management/if_wishlist.jmx + "${buttonTitle}" === "FOUND" + false + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}wishlist/index/share/wishlist_id/${wishlistId}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/share_wish_list.jmx + + + + <title>Wish List Sharing</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + true + + + true + ${customer_email} + = + true + emails + + + true + [TEST] See my wishlist!!! + = + true + message + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}wishlist/index/send/wishlist_id/${wishlistId}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/send_wish_list.jmx + + + + <title>My Wish List</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}customer/account/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/logout.jmx + + + + You are signed out. + + Assertion.response_data + false + 2 + + + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminCMSManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin CMS Management"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + mpaf/tool/fragments/ce/admin_cms_management/admin_cms_management.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/cms/page/ + GET + true + false + true + false + false + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/cms/page/new + GET + true + false + true + false + false + + + + + + + + true + <p>CMS Content ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + content + + + true + + = + true + content_heading + + + true + ${admin_form_key} + = + true + form_key + + + true + + = + true + identifier + + + true + 1 + = + true + is_active + + + true + + = + true + layout_update_xml + + + true + + = + true + meta_description + + + true + + = + true + meta_keywords + + + true + + = + true + meta_title + + + false + {} + = + true + nodes_data + + + true + + = + true + node_ids + + + true + + = + true + page_id + + + true + 1column + = + true + page_layout + + + true + 0 + = + true + store_id[0] + + + true + CMS Title ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + title + + + true + 0 + = + true + website_root + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/cms/page/save/ + POST + true + false + true + false + false + + + + + + You saved the page. + + Assertion.response_data + false + 16 + + + + + 1 + 0 + ${__javaScript(Math.round(${adminCMSManagementDelay}*1000))} + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminBrowseProductGridPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Browse Product Grid"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + + vars.put("gridEntityType" , "Product"); + + pagesCount = parseInt(vars.get("products_page_size")) || 20; + vars.put("grid_entity_page_size" , pagesCount); + vars.put("grid_namespace" , "product_listing"); + vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_product_filter_text")); + vars.put("grid_filter_field", "name"); + + // set sort fields and sort directions + vars.put("grid_sort_field_1", "name"); + vars.put("grid_sort_field_2", "price"); + vars.put("grid_sort_field_3", "attribute_set_id"); + vars.put("grid_sort_order_1", "asc"); + vars.put("grid_sort_order_2", "desc"); + + javascript + mpaf/tool/fragments/ce/admin_browse_products_grid/setup.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; + var totalsRecord = parseInt(vars.get("entity_total_records")); + var pageCount = Math.round(totalsRecord/pageSize); + + vars.put("grid_pages_count", pageCount); + + javascript + + + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + ${grid_admin_browse_filter_text} + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; +var totalsRecord = parseInt(vars.get("entity_total_records")); +var pageCount = Math.round(totalsRecord/pageSize); + +vars.put("grid_pages_count_filtered", pageCount); + + javascript + + + + + + 1 + ${grid_pages_count} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + ${page_number} + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + 1 + ${grid_pages_count_filtered} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx + + + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx + + + + grid_sort_field + grid_sort_field + true + 0 + 3 + + + + grid_sort_order + grid_sort_order + true + 0 + 2 + + + + + + + true + ${grid_namespace} + = + true + namespace + false + + + true + ${grid_admin_browse_filter_text} + = + true + filters[${grid_filter_field}] + false + + + true + true + = + true + filters[placeholder] + false + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + false + + + true + ${page_number} + = + true + paging[current] + false + + + true + ${grid_sort_field} + = + true + sorting[field] + false + + + true + ${grid_sort_order} + = + true + sorting[direction] + false + + + true + true + = + true + isAjax + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminBrowseOrderGridPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Browse Order Grid"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + + vars.put("gridEntityType" , "Order"); + + pagesCount = parseInt(vars.get("orders_page_size")) || 20; + vars.put("grid_entity_page_size" , pagesCount); + vars.put("grid_namespace" , "sales_order_grid"); + vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_orders_filter_text")); + vars.put("grid_filter_field", "status"); + + // set sort fields and sort directions + vars.put("grid_sort_field_1", "increment_id"); + vars.put("grid_sort_field_2", "created_at"); + vars.put("grid_sort_field_3", "billing_name"); + vars.put("grid_sort_order_1", "asc"); + vars.put("grid_sort_order_2", "desc"); + + javascript + mpaf/tool/fragments/ce/admin_browse_orders_grid/setup.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; + var totalsRecord = parseInt(vars.get("entity_total_records")); + var pageCount = Math.round(totalsRecord/pageSize); + + vars.put("grid_pages_count", pageCount); + + javascript + + + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + ${grid_admin_browse_filter_text} + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; +var totalsRecord = parseInt(vars.get("entity_total_records")); +var pageCount = Math.round(totalsRecord/pageSize); + +vars.put("grid_pages_count_filtered", pageCount); + + javascript + + + + + + 1 + ${grid_pages_count} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + ${page_number} + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + 1 + ${grid_pages_count_filtered} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx + + + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx + + + + grid_sort_field + grid_sort_field + true + 0 + 3 + + + + grid_sort_order + grid_sort_order + true + 0 + 2 + + + + + + + true + ${grid_namespace} + = + true + namespace + false + + + true + ${grid_admin_browse_filter_text} + = + true + filters[${grid_filter_field}] + false + + + true + true + = + true + filters[placeholder] + false + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + false + + + true + ${page_number} + = + true + paging[current] + false + + + true + ${grid_sort_field} + = + true + sorting[field] + false + + + true + ${grid_sort_order} + = + true + sorting[direction] + false + + + true + true + = + true + isAjax + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminProductCreationPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Create Product"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/once_only_controller.jmx + + + + mpaf/tool/fragments/ce/admin_create_product/get_related_product_id.jmx + import org.apache.jmeter.samplers.SampleResult; +import java.util.Random; +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom}); +} +relatedIndex = random.nextInt(props.get("simple_products_list").size()); +vars.put("related_product_id", props.get("simple_products_list").get(relatedIndex).get("id")); + + + true + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + Content-Type + application/json + + + Accept + */* + + + mpaf/tool/fragments/ce/api/header_manager_before_token.jmx + + + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/integration/admin/token + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/api/admin_token_retrieval.jmx + + + admin_token + $ + + + BODY + + + + + ^[a-z0-9-]+$ + + Assertion.response_data + false + 1 + variable + admin_token + + + + + + + + Authorization + Bearer ${admin_token} + + + mpaf/tool/fragments/ce/api/header_manager.jmx + + + + + + + false + mycolor + = + true + searchCriteria[filterGroups][0][filters][0][value] + + + false + attribute_code + = + true + searchCriteria[filterGroups][0][filters][0][field] + + + false + mysize + = + true + searchCriteria[filterGroups][0][filters][1][value] + + + false + attribute_code + = + true + searchCriteria[filterGroups][0][filters][1][field] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/default/V1/products/attributes + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_product/get_product_attributes.jmx + + + product_attributes + $.items + + + BODY + + + + javascript + + + + +var attributesData = JSON.parse(vars.get("product_attributes")), +maxOptions = 2; + +attributes = []; +for (i in attributesData) { + if (i >= 2) { + break; + } + var data = attributesData[i], + attribute = { + "id": data.attribute_id, + "code": data.attribute_code, + "label": data.default_frontend_label, + "options": [] + }; + + var processedOptions = 0; + for (optionN in data.options) { + var option = data.options[optionN]; + if (parseInt(option.value) > 0 && processedOptions < maxOptions) { + processedOptions++; + attribute.options.push(option); + } + } + attributes.push(attribute); +} + +vars.putObject("product_attributes", attributes); + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product_set/index/filter/${attribute_set_filter} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_product/configurable_setup_attribute_set.jmx + + + + false + attribute_set_id + catalog\/product_set\/edit\/id\/([\d]+)\/"[\D\d]*Attribute Set 1 + $1$ + + 1 + + + + false + + + import org.apache.commons.codec.binary.Base64; + +byte[] encodedBytes = Base64.encodeBase64("set_name=Attribute Set 1".getBytes()); +vars.put("attribute_set_filter", new String(encodedBytes)); + + + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + import org.apache.jmeter.samplers.SampleResult; +import java.util.Random; +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom}); +} +number = random.nextInt(props.get("simple_products_list_for_edit").size()); +simpleList = props.get("simple_products_list_for_edit").get(number); +vars.put("simple_product_1_id", simpleList.get("id")); +vars.put("simple_product_1_name", simpleList.get("title")); + +do { + number1 = random.nextInt(props.get("simple_products_list_for_edit").size()); +} while(number == number1); +simpleList = props.get("simple_products_list_for_edit").get(number1); +vars.put("simple_product_2_id", simpleList.get("id")); +vars.put("simple_product_2_name", simpleList.get("title")); + +number2 = random.nextInt(props.get("configurable_products_list").size()); +configurableList = props.get("configurable_products_list").get(number2); +vars.put("configurable_product_1_id", configurableList.get("id")); +vars.put("configurable_product_1_url_key", configurableList.get("url_key")); +vars.put("configurable_product_1_name", configurableList.get("title")); + +//Additional category to be added +//int categoryId = Integer.parseInt(vars.get("simple_product_category_id")); +//vars.put("category_additional", (categoryId+1).toString()); +//New price +vars.put("price_new", "9999"); +//New special price +vars.put("special_price_new", "8888"); +//New quantity +vars.put("quantity_new", "100600"); +vars.put("configurable_sku", "Configurable Product - ${__time(YMD)}-${__threadNum}-${__Random(1,1000000)}"); + + + + + true + mpaf/tool/fragments/ce/admin_create_product/setup.jmx + + + + mpaf/tool/fragments/ce/admin_create_product/create_bundle_product.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/ + GET + true + false + true + false + false + + + + + + records found + + Assertion.response_data + false + 2 + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/new/set/4/type/bundle/ + GET + true + false + true + false + false + + + + + + New Product + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 42 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[configurable_variations] + + + true + 1 + = + true + affect_configurable_product_attributes + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + bundle-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + + = + true + new-variations-attribute-set-id + + + true + 0 + = + true + product[shipment_type] + + + true + option title one + = + true + bundle_options[bundle_options][0][title] + + + true + + = + true + bundle_options[bundle_options][0][option_id] + + + true + + = + true + bundle_options[bundle_options][0][delete] + + + true + select + = + true + bundle_options[bundle_options][0][type] + + + true + 1 + = + true + bundle_options[bundle_options][0][required] + + + true + 0 + = + true + bundle_options[bundle_options][0][position] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_id] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][option_id] + + + true + ${simple_product_1_id} + = + true + bundle_options[bundle_options][0][bundle_selections][0][product_id] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][delete] + + + true + 25 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_price_value] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_price_type] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_qty] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_can_change_qty] + + + true + 0 + = + true + bundle_options[bundle_options][0][bundle_selections][0][position] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_id] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][option_id] + + + true + ${simple_product_2_id} + = + true + bundle_options[bundle_options][0][bundle_selections][1][product_id] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][delete] + + + true + 10.99 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_price_value] + + + true + 0 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_price_type] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_qty] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_can_change_qty] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][position] + + + true + option title two + = + true + bundle_options[bundle_options][1][title] + + + true + + = + true + bundle_options[bundle_options][1][option_id] + + + true + + = + true + bundle_options[bundle_options][1][delete] + + + true + select + = + true + bundle_options[bundle_options][1][type] + + + true + 1 + = + true + bundle_options[bundle_options][1][required] + + + true + 1 + = + true + bundle_options[bundle_options][1][position] + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_id] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][option_id] + true + + + true + ${simple_product_1_id} + = + true + bundle_options[bundle_options][1][bundle_selections][0][product_id] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][delete] + true + + + true + 5.00 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_price_value] + true + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_price_type] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_qty] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_can_change_qty] + true + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][0][position] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_id] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][option_id] + true + + + true + ${simple_product_2_id} + = + true + bundle_options[bundle_options][1][bundle_selections][1][product_id] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][delete] + true + + + true + 7.00 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_price_value] + true + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_price_type] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_qty] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_can_change_qty] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][position] + true + + + true + 2 + = + true + affect_bundle_product_selections + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/set/4/ + POST + true + false + true + false + false + + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 42 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full bundle product Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[configurable_variations] + + + true + 1 + = + true + affect_configurable_product_attributes + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + bundle-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + + = + true + new-variations-attribute-set-id + + + true + 0 + = + true + product[shipment_type] + false + + + true + option title one + = + true + bundle_options[bundle_options][0][title] + false + + + true + + = + true + bundle_options[bundle_options][0][option_id] + false + + + true + + = + true + bundle_options[bundle_options][0][delete] + false + + + true + select + = + true + bundle_options[bundle_options][0][type] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][required] + false + + + true + 0 + = + true + bundle_options[bundle_options][0][position] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_id] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][option_id] + false + + + true + ${simple_product_1_id} + = + true + bundle_options[bundle_options][0][bundle_selections][0][product_id] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][delete] + false + + + true + 25 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_price_value] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_price_type] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_can_change_qty] + false + + + true + 0 + = + true + bundle_options[bundle_options][0][bundle_selections][0][position] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_id] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][option_id] + false + + + true + ${simple_product_2_id} + = + true + bundle_options[bundle_options][0][bundle_selections][1][product_id] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][delete] + false + + + true + 10.99 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_price_value] + false + + + true + 0 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_price_type] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_can_change_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][position] + false + + + true + option title two + = + true + bundle_options[bundle_options][1][title] + false + + + true + + = + true + bundle_options[bundle_options][1][option_id] + false + + + true + + = + true + bundle_options[bundle_options][1][delete] + false + + + true + select + = + true + bundle_options[bundle_options][1][type] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][required] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][position] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_id] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][option_id] + false + + + true + ${simple_product_1_id} + = + true + bundle_options[bundle_options][1][bundle_selections][0][product_id] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][delete] + false + + + true + 5.00 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_price_value] + false + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_price_type] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_can_change_qty] + false + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][0][position] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_id] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][option_id] + false + + + true + ${simple_product_2_id} + = + true + bundle_options[bundle_options][1][bundle_selections][1][product_id] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][delete] + false + + + true + 7.00 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_price_value] + false + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_price_type] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_can_change_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][position] + false + + + true + 2 + = + true + affect_bundle_product_selections + false + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/set/4/type/bundle/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + + You saved the product + option title one + option title two + ${simple_product_2_name} + ${simple_product_1_name} + + + Assertion.response_data + false + 2 + + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_product/open_catalog_grid.jmx + + + + records found + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/new/set/${attribute_set_id}/type/configurable/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_product/new_configurable.jmx + + + + New Product + + Assertion.response_data + false + 2 + + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + 1 + = + true + affect_configurable_product_attributes + true + + + true + ${admin_form_key} + = + true + form_key + true + + + true + ${attribute_set_id} + = + true + new-variations-attribute-set-id + true + + + true + 1 + = + true + product[affect_product_custom_options] + true + + + true + ${attribute_set_id} + = + true + product[attribute_set_id] + true + + + true + 4 + = + true + product[category_ids][0] + true + + + true + + = + true + product[custom_layout_update] + true + + + true + + = + true + product[description] + true + + + true + 0 + = + true + product[gift_message_available] + true + + + true + 1 + = + true + product[gift_wrapping_available] + true + + + true + + = + true + product[gift_wrapping_price] + true + + + true + + = + true + product[image] + true + + + true + 2 + = + true + product[is_returnable] + true + + + true + ${configurable_sku} - Meta Description + = + true + product[meta_description] + true + + + true + ${configurable_sku} - Meta Keyword + = + true + product[meta_keyword] + true + + + true + ${configurable_sku} - Meta Title + = + true + product[meta_title] + true + + + true + ${configurable_sku} + = + true + product[name] + true + + + true + container2 + = + true + product[options_container] + true + + + true + ${price_new} + = + true + product[price] + true + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + true + + + true + 1000 + = + true + product[quantity_and_stock_status][qty] + true + + + true + + = + true + product[short_description] + true + + + true + ${configurable_sku} + = + true + product[sku] + true + + + true + + = + true + product[small_image] + true + + + true + ${special_price_new} + = + true + product[special_price] + true + + + true + 1 + = + true + product[status] + true + + + true + 0 + = + true + product[stock_data][backorders] + true + + + true + 1 + = + true + product[stock_data][deferred_stock_update] + true + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + true + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + true + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + true + + + true + 1 + = + true + product[stock_data][manage_stock] + true + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + true + + + true + 0 + = + true + product[stock_data][min_qty] + true + + + true + 1 + = + true + product[stock_data][min_sale_qty] + true + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + true + + + true + 1 + = + true + product[stock_data][qty_increments] + true + + + true + 1 + = + true + product[stock_data][use_config_backorders] + true + + + true + 1 + = + true + product[stock_data][use_config_deferred_stock_update] + true + + + true + 1 + = + true + product[stock_data][use_config_enable_qty_increments] + true + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + true + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + true + + + true + 2 + = + true + product[tax_class_id] + true + + + true + + = + true + product[thumbnail] + true + + + true + + = + true + product[url_key] + true + + + true + 1 + = + true + product[use_config_gift_message_available] + true + + + true + 1 + = + true + product[use_config_gift_wrapping_available] + true + + + true + 1 + = + true + product[use_config_is_returnable] + true + + + true + 4 + = + true + product[visibility] + true + + + true + 1 + = + true + product[website_ids][1] + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/set/${attribute_set_id}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_product/configurable_validate.jmx + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + javascript + + + + +attributes = vars.getObject("product_attributes"); + +for (i in attributes) { + var attribute = attributes[i]; + sampler.addArgument("attribute_codes[" + i + "]", attribute.code); + sampler.addArgument("attributes[" + i + "]", attribute.id); + sampler.addArgument("product[" + attribute.code + "]", attribute.options[0].value); + addConfigurableAttributeData(attribute); +} + +addConfigurableMatrix(attributes); + +function addConfigurableAttributeData(attribute) { + var attributeId = attribute.id; + + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attribute.code); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attribute.label); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][position]", 0); + attribute.options.forEach(function (option, index) { + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][values][" + option.value + "][include]", index); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][values][" + option.value + "][value_index]", option.value); + }); +} + +/** + * Build 4 simple products for Configurable + */ +function addConfigurableMatrix(attributes) { + + var attribute1 = attributes[0], + attribute2 = attributes[1], + productIndex = 1, + products = []; + var variationNames = []; + attribute1.options.forEach(function (option1) { + attribute2.options.forEach(function (option2) { + var productAttributes = {}, + namePart = option1.label + "+" + option2.label, + variationKey = option1.value + "-" + option2.value; + productAttributes[attribute1.code] = option1.value; + productAttributes[attribute2.code] = option2.value; + + variationNames.push(namePart + " - " + vars.get("configurable_sku")); + var product = { + "id": null, + "name": namePart + " - " + vars.get("configurable_sku"), + "sku": namePart + " - " + vars.get("configurable_sku"), + "status": 1, + "price": "100", + "price_currency": "$", + "price_string": "$100", + "weight": "6", + "qty": "50", + "variationKey": variationKey, + "configurable_attribute": JSON.stringify(productAttributes), + "thumbnail_image": "", + "media_gallery": {"images": {}}, + "image": [], + "was_changed": true, + "canEdit": 1, + "newProduct": 1, + "record_id": productIndex + }; + productIndex++; + products.push(product); + }); + }); + + sampler.addArgument("configurable-matrix-serialized", JSON.stringify(products)); + vars.putObject("configurable_variations_assertion", variationNames); +} + + mpaf/tool/fragments/ce/admin_create_product/configurable_prepare_data.jmx + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + 1 + = + true + affect_configurable_product_attributes + true + + + true + ${admin_form_key} + = + true + form_key + true + + + true + ${attribute_set_id} + = + true + new-variations-attribute-set-id + true + + + true + 1 + = + true + product[affect_product_custom_options] + true + + + true + ${attribute_set_id} + = + true + product[attribute_set_id] + true + + + true + 2 + = + true + product[category_ids][0] + true + + + true + + = + true + product[custom_layout_update] + true + + + true + + = + true + product[description] + true + + + true + 0 + = + true + product[gift_message_available] + true + + + true + 1 + = + true + product[gift_wrapping_available] + true + + + true + + = + true + product[gift_wrapping_price] + true + + + true + + = + true + product[image] + true + + + true + 2 + = + true + product[is_returnable] + true + + + true + ${configurable_sku} - Meta Description + = + true + product[meta_description] + true + + + true + ${configurable_sku} - Meta Keyword + = + true + product[meta_keyword] + true + + + true + ${configurable_sku} - Meta Title + = + true + product[meta_title] + true + + + true + ${configurable_sku} + = + true + product[name] + true + + + true + container2 + = + true + product[options_container] + true + + + true + ${price_new} + = + true + product[price] + true + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + true + + + true + 1000 + = + true + product[quantity_and_stock_status][qty] + true + + + true + + = + true + product[short_description] + true + + + true + ${configurable_sku} + = + true + product[sku] + true + + + true + + = + true + product[small_image] + true + + + true + ${special_price_new} + = + true + product[special_price] + true + + + true + 1 + = + true + product[status] + true + + + true + 0 + = + true + product[stock_data][backorders] + true + + + true + 1 + = + true + product[stock_data][deferred_stock_update] + true + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + true + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + true + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + true + + + true + 1 + = + true + product[stock_data][manage_stock] + true + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + true + + + true + 0 + = + true + product[stock_data][min_qty] + true + + + true + 1 + = + true + product[stock_data][min_sale_qty] + true + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + true + + + true + 1 + = + true + product[stock_data][qty_increments] + true + + + true + 1 + = + true + product[stock_data][use_config_backorders] + true + + + true + 1 + = + true + product[stock_data][use_config_deferred_stock_update] + true + + + true + 1 + = + true + product[stock_data][use_config_enable_qty_increments] + true + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + true + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + true + + + true + 2 + = + true + product[tax_class_id] + true + + + true + + = + true + product[thumbnail] + true + + + true + + = + true + product[url_key] + true + + + true + 1 + = + true + product[use_config_gift_message_available] + true + + + true + 1 + = + true + product[use_config_gift_wrapping_available] + true + + + true + 1 + = + true + product[use_config_is_returnable] + true + + + true + 4 + = + true + product[visibility] + true + + + true + 1 + = + true + product[website_ids][1] + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/set/${attribute_set_id}/type/configurable/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_product/configurable_save.jmx + + + + You saved the product + + Assertion.response_data + false + 2 + + + + javascript + + + + +var configurableVariations = vars.getObject("configurable_variations_assertion"), +response = SampleResult.getResponseDataAsString(); + +configurableVariations.forEach(function (variation) { + if (response.indexOf(variation) == -1) { + AssertionResult.setFailureMessage("Cannot find variation \"" + variation + "\""); + AssertionResult.setFailure(true); + } +}); + + + + + + javascript + + + + +attributes = vars.getObject("product_attributes"); + +for (i in attributes) { + var attribute = attributes[i]; + sampler.addArgument("attribute_codes[" + i + "]", attribute.code); + sampler.addArgument("attributes[" + i + "]", attribute.id); + sampler.addArgument("product[" + attribute.code + "]", attribute.options[0].value); + addConfigurableAttributeData(attribute); +} + +addConfigurableMatrix(attributes); + +function addConfigurableAttributeData(attribute) { + var attributeId = attribute.id; + + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attribute.code); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attribute.label); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][position]", 0); + attribute.options.forEach(function (option, index) { + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][values][" + option.value + "][include]", index); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][values][" + option.value + "][value_index]", option.value); + }); +} + +/** + * Build 4 simple products for Configurable + */ +function addConfigurableMatrix(attributes) { + + var attribute1 = attributes[0], + attribute2 = attributes[1], + productIndex = 1, + products = []; + var variationNames = []; + attribute1.options.forEach(function (option1) { + attribute2.options.forEach(function (option2) { + var productAttributes = {}, + namePart = option1.label + "+" + option2.label, + variationKey = option1.value + "-" + option2.value; + productAttributes[attribute1.code] = option1.value; + productAttributes[attribute2.code] = option2.value; + + variationNames.push(namePart + " - " + vars.get("configurable_sku")); + var product = { + "id": null, + "name": namePart + " - " + vars.get("configurable_sku"), + "sku": namePart + " - " + vars.get("configurable_sku"), + "status": 1, + "price": "100", + "price_currency": "$", + "price_string": "$100", + "weight": "6", + "qty": "50", + "variationKey": variationKey, + "configurable_attribute": JSON.stringify(productAttributes), + "thumbnail_image": "", + "media_gallery": {"images": {}}, + "image": [], + "was_changed": true, + "canEdit": 1, + "newProduct": 1, + "record_id": productIndex + }; + productIndex++; + products.push(product); + }); + }); + + sampler.addArgument("configurable-matrix-serialized", JSON.stringify(products)); + vars.putObject("configurable_variations_assertion", variationNames); +} + + mpaf/tool/fragments/ce/admin_create_product/configurable_prepare_data.jmx + + + + + + mpaf/tool/fragments/ce/admin_create_product/create_downloadable_product.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/ + GET + true + false + true + false + false + + + + + + records found + + Assertion.response_data + false + 2 + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/new/set/4/type/downloadable/ + GET + true + false + true + false + false + + + + + + New Product + + Assertion.response_data + false + 2 + + + + + + + + ${files_folder}downloadable_original.txt + links + text/plain + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/downloadable_file/upload/type/links/?isAjax=true + POST + false + false + true + true + false + + + + + original_file + $.file + + + BODY + + + + + + + + ${files_folder}downloadable_sample.txt + samples + text/plain + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/downloadable_file/upload/type/samples/?isAjax=true + POST + false + false + true + true + false + + + + + sample_file + $.file + + + BODY + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 123 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + downloadable-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + on + = + true + is_downloadable + + + true + Links + = + true + product[links_title] + + + true + 0 + = + true + product[links_purchased_separately] + + + true + ${original_file} + = + true + downloadable[link][0][file][0][file] + false + + + true + downloadable_original.txt + = + true + downloadable[link][0][file][0][name] + false + + + true + 13 + = + true + downloadable[link][0][file][0][size] + false + + + true + new + = + true + downloadable[link][0][file][0][status] + false + + + true + 1 + = + true + downloadable[link][0][is_shareable] + + + true + 0 + = + true + downloadable[link][0][is_unlimited] + + + true + + = + true + downloadable[link][0][link_url] + + + true + 0 + = + true + downloadable[link][0][number_of_downloads] + true + + + true + 120 + = + true + downloadable[link][0][price] + true + + + true + 0 + = + true + downloadable[link][0][record_id] + true + + + true + file + = + true + downloadable[link][0][sample][type] + + + true + + = + true + downloadable[link][0][sample][url] + + + true + 1 + = + true + downloadable[link][0][sort_order] + + + true + Original Link + = + true + downloadable[link][0][title] + + + true + file + = + true + downloadable[link][0][type] + + + true + ${sample_file} + = + true + downloadable[sample][0][file][0][file] + true + + + true + downloadable_sample.txt + = + true + downloadable[sample][0][file][0][name] + true + + + true + 14 + = + true + downloadable[sample][0][file][0][size] + true + + + true + new + = + true + downloadable[sample][0][file][0][status] + true + + + true + 0 + = + true + downloadable[sample][0][record_id] + true + + + true + + = + true + downloadable[sample][0][sample_url] + true + + + true + 1 + = + true + downloadable[sample][0][sort_order] + true + + + true + Sample Link + = + true + downloadable[sample][0][title] + true + + + true + file + = + true + downloadable[sample][0][type] + true + + + true + 1 + = + true + affect_configurable_product_attributes + false + + + true + 4 + = + true + new-variations-attribute-set-id + false + + + true + + = + true + product[configurable_variation] + false + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/set/4/type/downloadable/ + POST + true + false + true + false + false + + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 123 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + false + + + true + 1 + = + true + product[status] + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + downloadable-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + ${original_file} + = + true + downloadable[link][0][file][0][file] + false + + + true + downloadable_original.txt + = + true + downloadable[link][0][file][0][name] + false + + + true + 13 + = + true + downloadable[link][0][file][0][size] + false + + + true + new + = + true + downloadable[link][0][file][0][status] + false + + + true + 1 + = + true + downloadable[link][0][is_shareable] + true + + + true + 0 + = + true + downloadable[link][0][is_unlimited] + true + + + true + + = + true + downloadable[link][0][link_url] + true + + + true + 0 + = + true + downloadable[link][0][number_of_downloads] + false + + + true + 120 + = + true + downloadable[link][0][price] + false + + + true + 0 + = + true + downloadable[link][0][record_id] + false + + + true + file + = + true + downloadable[link][0][sample][type] + true + + + true + + = + true + downloadable[link][0][sample][url] + true + + + true + 1 + = + true + downloadable[link][0][sort_order] + true + + + true + Original Link + = + true + downloadable[link][0][title] + true + + + true + file + = + true + downloadable[link][0][type] + true + + + true + ${sample_file} + = + true + downloadable[sample][0][file][0][file] + true + + + true + downloadable_sample.txt + = + true + downloadable[sample][0][file][0][name] + true + + + true + 14 + = + true + downloadable[sample][0][file][0][size] + true + + + true + new + = + true + downloadable[sample][0][file][0][status] + true + + + true + 0 + = + true + downloadable[sample][0][record_id] + true + + + true + + = + true + downloadable[sample][0][sample_url] + true + + + true + 1 + = + true + downloadable[sample][0][sort_order] + true + + + true + Sample Link + = + true + downloadable[sample][0][title] + true + + + true + file + = + true + downloadable[sample][0][type] + true + + + true + 1 + = + true + affect_configurable_product_attributes + false + + + true + 4 + = + true + new-variations-attribute-set-id + false + + + true + + = + true + product[configurable_variation] + false + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/set/4/type/downloadable/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + + You saved the product + + Assertion.response_data + false + 2 + + + + + violation + + Assertion.response_data + false + 6 + + + + + + + mpaf/tool/fragments/ce/admin_create_product/create_simple_product.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/ + GET + true + false + true + false + false + + + + + + records found + + Assertion.response_data + false + 2 + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/new/set/4/type/simple/ + GET + true + false + true + false + false + + + + + + New Product + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 123 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + simple-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + + = + true + product[options][1][is_delete] + false + + + true + 1 + = + true + product[options][1][is_require] + false + + + true + select + = + true + product[options][1][previous_group] + false + + + true + drop_down + = + true + product[options][1][previous_type] + false + + + true + 0 + = + true + product[options][1][sort_order] + false + + + true + Product Option Title One + = + true + product[options][1][title] + false + + + true + drop_down + = + true + product[options][1][type] + false + + + true + + = + true + product[options][1][values][1][is_delete] + false + + + true + 200 + = + true + product[options][1][values][1][price] + false + + + true + fixed + = + true + product[options][1][values][1][price_type] + false + + + true + sku-one + = + true + product[options][1][values][1][sku] + false + + + true + 0 + = + true + product[options][1][values][1][sort_order] + false + + + true + Row Title + = + true + product[options][1][values][1][title] + false + + + true + + = + true + product[options][2][is_delete] + false + + + true + 1 + = + true + product[options][2][is_require] + false + + + true + 250 + = + true + product[options][2][max_characters] + false + + + true + text + = + true + product[options][2][previous_group] + false + + + true + field + = + true + product[options][2][previous_type] + false + + + true + 500 + = + true + product[options][2][price] + false + + + true + fixed + = + true + product[options][2][price_type] + false + + + true + sku-two + = + true + product[options][2][sku] + false + + + true + 1 + = + true + product[options][2][sort_order] + false + + + true + Field Title + = + true + product[options][2][title] + false + + + true + field + = + true + product[options][2][type] + false + + + true + 1 + = + true + affect_configurable_product_attributes + true + + + true + 4 + = + true + new-variations-attribute-set-id + true + + + true + + = + true + product[configurable_variation] + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/set/4/ + POST + true + false + true + false + false + + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 123 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full simple product Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + simple-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + + = + true + product[options][1][is_delete] + true + + + true + 1 + = + true + product[options][1][is_require] + + + true + select + = + true + product[options][1][previous_group] + false + + + true + drop_down + = + true + product[options][1][previous_type] + false + + + true + 0 + = + true + product[options][1][sort_order] + false + + + true + Product Option Title One + = + true + product[options][1][title] + + + true + drop_down + = + true + product[options][1][type] + + + true + + = + true + product[options][1][values][1][is_delete] + false + + + true + 200 + = + true + product[options][1][values][1][price] + + + true + fixed + = + true + product[options][1][values][1][price_type] + + + true + sku-one + = + true + product[options][1][values][1][sku] + + + true + 0 + = + true + product[options][1][values][1][sort_order] + + + true + Row Title + = + true + product[options][1][values][1][title] + + + true + + = + true + product[options][2][is_delete] + false + + + true + 1 + = + true + product[options][2][is_require] + + + true + 250 + = + true + product[options][2][max_characters] + + + true + text + = + true + product[options][2][previous_group] + + + true + field + = + true + product[options][2][previous_type] + + + true + 500 + = + true + product[options][2][price] + + + true + fixed + = + true + product[options][2][price_type] + + + true + sku-two + = + true + product[options][2][sku] + + + true + 1 + = + true + product[options][2][sort_order] + + + true + Field Title + = + true + product[options][2][title] + + + true + field + = + true + product[options][2][type] + + + true + 1 + = + true + affect_configurable_product_attributes + true + + + true + 4 + = + true + new-variations-attribute-set-id + true + + + true + + = + true + product[configurable_variation] + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/set/4/type/simple/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + + You saved the product + + Assertion.response_data + false + 2 + + + + + violation + + Assertion.response_data + false + 6 + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminProductEditingPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Edit Product"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + mpaf/tool/fragments/ce/admin_edit_product/admin_edit_product_updated.jmx + import java.util.ArrayList; + import java.util.HashMap; + import java.util.Random; + + try { + Random random = new Random(); + if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); + } + simpleCount = props.get("simple_products_list_for_edit").size(); + configCount = props.get("configurable_products_list_for_edit").size(); + productCount = 0; + if (simpleCount > configCount) { + productCount = configCount; + } else { + productCount = simpleCount; + } + int threadsNumber = ctx.getThreadGroup().getNumThreads(); + if (threadsNumber == 0) { + threadsNumber = 1; + } + //Current thread number starts from 0 + currentThreadNum = ctx.getThreadNum(); + + String siterator = vars.get("threadIterator_" + currentThreadNum.toString()); + iterator = 0; + if(siterator == null){ + vars.put("threadIterator_" + currentThreadNum.toString() , "0"); + } else { + iterator = Integer.parseInt(siterator); + iterator ++; + vars.put("threadIterator_" + currentThreadNum.toString() , iterator.toString()); + } + + //Number of products for one thread + productClusterLength = productCount / threadsNumber; + + if (iterator >= productClusterLength) { + vars.put("threadIterator_" + currentThreadNum.toString(), "0"); + iterator = 0; + } + + //Index of the current product from the cluster + i = productClusterLength * currentThreadNum + iterator; + + //ids of simple and configurable products to edit + vars.put("simple_product_id", props.get("simple_products_list_for_edit").get(i).get("id")); + vars.put("configurable_product_id", props.get("configurable_products_list_for_edit").get(i).get("id")); + + //id of related product + do { + relatedIndex = random.nextInt(props.get("simple_products_list_for_edit").size()); + } while(i == relatedIndex); + vars.put("related_product_id", props.get("simple_products_list_for_edit").get(relatedIndex).get("id")); + } catch (Exception ex) { + log.info("Script execution failed", ex); +} + + + false + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/edit/id/${simple_product_id}/ + GET + true + false + true + false + false + + + + + + Product + + Assertion.response_data + false + 16 + + + + false + simple_product_name + ,"name":"([^'"]+)", + $1$ + + 1 + + + + false + simple_product_sku + ,"sku":"([^'"]+)", + $1$ + + 1 + + + + false + simple_product_category_id + ,"category_ids":."(\d+)". + $1$ + + 1 + + + + + Passing arguments between threads + //Additional category to be added + import java.util.Random; + + Random randomGenerator = new Random(); + if (${seedForRandom} > 0) { + randomGenerator.setSeed(${seedForRandom} + ${__threadNum}); + } + + int categoryId = Integer.parseInt(vars.get("simple_product_category_id")); + categoryList = props.get("admin_category_ids_list"); + + if (categoryList.size() > 1) { + do { + int index = randomGenerator.nextInt(categoryList.size()); + newCategoryId = categoryList.get(index); + } while (categoryId == newCategoryId); + + vars.put("category_additional", newCategoryId.toString()); + } + + //New price + vars.put("price_new", "9999"); + //New special price + vars.put("special_price_new", "8888"); + //New quantity + vars.put("quantity_new", "100600"); + + + + false + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${simple_product_name} + = + true + product[name] + false + + + true + ${simple_product_sku} + = + true + product[sku] + false + + + true + ${price_new} + = + true + product[price] + false + + + true + 2 + = + true + product[tax_class_id] + false + + + true + ${quantity_new} + = + true + product[quantity_and_stock_status][qty] + false + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + false + + + true + 1.0000 + = + true + product[weight] + false + + + true + 1 + = + true + product[product_has_weight] + false + + + true + ${simple_product_category_id} + = + true + product[category_ids][] + false + + + true + <p>Full simple product Description ${simple_product_id} Edited</p> + = + true + product[description] + false + + + true + 1 + = + true + product[status] + false + + + true + + = + true + product[configurable_variations] + false + + + true + 1 + = + true + affect_configurable_product_attributes + false + + + true + + = + true + product[image] + false + + + true + + = + true + product[small_image] + false + + + true + + = + true + product[thumbnail] + false + + + true + ${simple_product_name} + = + true + product[url_key] + false + + + true + ${simple_product_name} Meta Title Edited + = + true + product[meta_title] + false + + + true + ${simple_product_name} Meta Keyword Edited + = + true + product[meta_keyword] + false + + + true + ${simple_product_name} Meta Description Edited + = + true + product[meta_description] + false + + + true + 1 + = + true + product[website_ids][] + false + + + true + ${special_price_new} + = + true + product[special_price] + false + + + true + + = + true + product[special_from_date] + false + + + true + + = + true + product[special_to_date] + false + + + true + + = + true + product[cost] + false + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + false + + + true + ${quantity_new} + = + true + product[stock_data][original_inventory_qty] + false + + + true + ${quantity_new} + = + true + product[stock_data][qty] + false + + + true + 0 + = + true + product[stock_data][min_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + false + + + true + 1 + = + true + product[stock_data][min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + false + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + false + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + false + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + false + + + true + 0 + = + true + product[stock_data][backorders] + false + + + true + 1 + = + true + product[stock_data][use_config_backorders] + false + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + false + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + false + + + true + 0 + = + true + product[stock_data][qty_increments] + false + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + false + + + true + 1 + = + true + product[stock_data][is_in_stock] + false + + + true + + = + true + product[custom_design] + false + + + true + + = + true + product[custom_design_from] + false + + + true + + = + true + product[custom_design_to] + false + + + true + + = + true + product[custom_layout_update] + false + + + true + + = + true + product[page_layout] + false + + + true + container2 + = + true + product[options_container] + false + + + true + + = + true + new-variations-attribute-set-id + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/id/${simple_product_id}/?isAjax=true + POST + true + false + true + false + false + + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${simple_product_name} + = + true + product[name] + false + + + true + ${simple_product_sku} + = + true + product[sku] + false + + + true + ${price_new} + = + true + product[price] + false + + + true + 2 + = + true + product[tax_class_id] + false + + + true + ${quantity_new} + = + true + product[quantity_and_stock_status][qty] + false + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + false + + + true + 1.0000 + = + true + product[weight] + false + + + true + 1 + = + true + product[product_has_weight] + false + + + true + ${simple_product_category_id} + = + true + product[category_ids][] + false + + + true + ${category_additional} + = + true + product[category_ids][] + + + true + <p>Full simple product Description ${simple_product_id} Edited</p> + = + true + product[description] + false + + + true + 1 + = + true + product[status] + false + + + true + + = + true + product[configurable_variations] + false + + + true + 1 + = + true + affect_configurable_product_attributes + false + + + true + + = + true + product[image] + false + + + true + + = + true + product[small_image] + false + + + true + + = + true + product[thumbnail] + false + + + true + ${simple_product_name} + = + true + product[url_key] + false + + + true + ${simple_product_name} Meta Title Edited + = + true + product[meta_title] + false + + + true + ${simple_product_name} Meta Keyword Edited + = + true + product[meta_keyword] + false + + + true + ${simple_product_name} Meta Description Edited + = + true + product[meta_description] + false + + + true + 1 + = + true + product[website_ids][] + false + + + true + ${special_price_new} + = + true + product[special_price] + false + + + true + + = + true + product[special_from_date] + false + + + true + + = + true + product[special_to_date] + false + + + true + + = + true + product[cost] + false + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + false + + + true + ${quantity_new} + = + true + product[stock_data][original_inventory_qty] + false + + + true + ${quantity_new} + = + true + product[stock_data][qty] + false + + + true + 0 + = + true + product[stock_data][min_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + false + + + true + 1 + = + true + product[stock_data][min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + false + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + false + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + false + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + false + + + true + 0 + = + true + product[stock_data][backorders] + false + + + true + 1 + = + true + product[stock_data][use_config_backorders] + false + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + false + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + false + + + true + 0 + = + true + product[stock_data][qty_increments] + false + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + false + + + true + 1 + = + true + product[stock_data][is_in_stock] + false + + + true + + = + true + product[custom_design] + false + + + true + + = + true + product[custom_design_from] + false + + + true + + = + true + product[custom_design_to] + false + + + true + + = + true + product[custom_layout_update] + false + + + true + + = + true + product[page_layout] + false + + + true + container2 + = + true + product[options_container] + false + + + true + + = + true + new-variations-attribute-set-id + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/id/${simple_product_id}/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + + You saved the product + + Assertion.response_data + false + 2 + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/edit/id/${configurable_product_id}/ + GET + true + false + true + false + false + + + + + + Product + + Assertion.response_data + false + 16 + + + + false + configurable_product_name + ,"name":"([^'"]+)", + $1$ + + 1 + + + + false + configurable_product_sku + ,"sku":"([^'"]+)", + $1$ + + 1 + + + + false + configurable_product_category_id + ,"category_ids":."(\d+)" + $1$ + + 1 + + + + false + configurable_attribute_id + ,"configurable_variation":"([^'"]+)", + $1$ + + 1 + true + + + + false + configurable_matrix + "configurable-matrix":(\[.*?\]) + $1$ + + 1 + true + + + + associated_products_ids + $.[*].id + + configurable_matrix + VAR + + + + false + configurable_product_data + (\{"product":.*?configurable_attributes_data.*?\})\s*< + $1$ + + 1 + + + + configurable_attributes_data + $.product.configurable_attributes_data + + configurable_product_data + VAR + + + + false + configurable_attribute_ids + "attribute_id":"(\d+)" + $1$ + + -1 + variable + configurable_attributes_data + + + + false + configurable_attribute_codes + "code":"(\w+)" + $1$ + + -1 + variable + configurable_attributes_data + + + + false + configurable_attribute_labels + "label":"(.*?)" + $1$ + + -1 + variable + configurable_attributes_data + + + + false + configurable_attribute_values + "values":(\{(?:\}|.*?\}\})) + $1$ + + -1 + variable + configurable_attributes_data + + + + + configurable_attribute_ids + configurable_attribute_id + true + + + + 1 + ${configurable_attribute_ids_matchNr} + 1 + attribute_counter + + true + true + + + + return vars.get("configurable_attribute_values_" + vars.get("attribute_counter")); + + + false + + + + false + attribute_${configurable_attribute_id}_values + "value_index":"(\d+)" + $1$ + + -1 + configurable_attribute_values_${attribute_counter} + + + + + + + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${configurable_product_name} + = + true + product[name] + false + + + true + ${configurable_product_sku} + = + true + product[sku] + false + + + true + ${price_new} + = + true + product[price] + false + + + true + 2 + = + true + product[tax_class_id] + false + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + false + + + true + 3 + = + true + product[weight] + false + + + true + ${configurable_product_category_id} + = + true + product[category_ids][] + false + + + true + ${category_additional} + = + true + product[category_ids][] + false + + + true + <p>Configurable product description ${configurable_product_id} Edited</p> + = + true + product[description] + false + + + true + 1 + = + true + product[status] + false + + + true + ${configurable_product_name} Meta Title Edited + = + true + product[meta_title] + false + + + true + ${configurable_product_name} Meta Keyword Edited + = + true + product[meta_keyword] + false + + + true + ${configurable_product_name} Meta Description Edited + = + true + product[meta_description] + false + + + true + 1 + = + true + product[website_ids][] + false + + + true + ${special_price_new} + = + true + product[special_price] + false + + + true + + = + true + product[special_from_date] + false + + + true + + = + true + product[special_to_date] + false + + + true + + = + true + product[cost] + false + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + false + + + true + 0 + = + true + product[stock_data][min_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + false + + + true + 1 + = + true + product[stock_data][min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + false + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + false + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + false + + + true + 0 + = + true + product[stock_data][backorders] + false + + + true + 1 + = + true + product[stock_data][use_config_backorders] + false + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + false + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + false + + + true + 0 + = + true + product[stock_data][qty_increments] + false + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + false + + + true + 1 + = + true + product[stock_data][is_in_stock] + false + + + true + + = + true + product[custom_design] + false + + + true + + = + true + product[custom_design_from] + false + + + true + + = + true + product[custom_design_to] + false + + + true + + = + true + product[custom_layout_update] + false + + + true + + = + true + product[page_layout] + false + + + true + container2 + = + true + product[options_container] + false + + + true + ${configurable_attribute_id} + = + true + product[configurable_variation] + false + + + true + ${configurable_product_name} + = + true + product[url_key] + + + true + 1 + = + true + product[use_config_gift_message_available] + + + true + 1 + = + true + product[use_config_gift_wrapping_available] + + + true + 4 + = + true + product[visibility] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 50 + = + true + product[stock_data][qty] + false + + + true + configurable + = + true + product[stock_data][type_id] + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/id/${configurable_product_id}/ + POST + true + false + true + false + false + + + + + false + + + try { + int attributesCount = Integer.parseInt(vars.get("configurable_attribute_ids_matchNr")); + for (int i = 1; i <= attributesCount; i++) { + attributeId = vars.get("configurable_attribute_ids_" + i.toString()); + attributeCode = vars.get("configurable_attribute_codes_" + i.toString()); + attributeLabel = vars.get("configurable_attribute_labels_" + i.toString()); + ctx.getCurrentSampler().addArgument("attributes[" + (i - 1).toString() + "]", attributeId); + ctx.getCurrentSampler().addArgument("attribute_codes[" + (i - 1).toString() + "]", attributeCode); + ctx.getCurrentSampler().addArgument("product[" + attributeCode + "]", attributeId); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][position]", (i - 1).toString()); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attributeCode); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attributeLabel); + + int valuesCount = Integer.parseInt(vars.get("attribute_" + attributeId + "_values_matchNr")); + for (int j = 1; j <= valuesCount; j++) { + attributeValue = vars.get("attribute_" + attributeId + "_values_" + j.toString()); + ctx.getCurrentSampler().addArgument( + "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][include]", + "1" + ); + ctx.getCurrentSampler().addArgument( + "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][value_index]", + attributeValue + ); + } + } + ctx.getCurrentSampler().addArgument("associated_product_ids_serialized", vars.get("associated_products_ids").toString()); + } catch (Exception e) { + log.error("error???", e); + } + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${configurable_product_name} + = + true + product[name] + false + + + true + ${configurable_product_sku} + = + true + product[sku] + false + + + true + ${price_new} + = + true + product[price] + false + + + true + 2 + = + true + product[tax_class_id]admin + false + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + false + + + true + 3 + = + true + product[weight] + false + + + true + ${configurable_product_category_id} + = + true + product[category_ids][] + false + + + true + ${category_additional} + = + true + product[category_ids][] + false + + + true + <p>Configurable product description ${configurable_product_id} Edited</p> + = + true + product[description] + false + + + true + 1 + = + true + product[status] + false + + + true + ${configurable_product_name} Meta Title Edited + = + true + product[meta_title] + false + + + true + ${configurable_product_name} Meta Keyword Edited + = + true + product[meta_keyword] + false + + + true + ${configurable_product_name} Meta Description Edited + = + true + product[meta_description] + false + + + true + 1 + = + true + product[website_ids][] + false + + + true + ${special_price_new} + = + true + product[special_price] + false + + + true + + = + true + product[special_from_date] + false + + + true + + = + true + product[special_to_date] + false + + + true + + = + true + product[cost] + false + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + false + + + true + 0 + = + true + product[stock_data][min_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + false + + + true + 1 + = + true + product[stock_data][min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + false + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + false + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + false + + + true + 0 + = + true + product[stock_data][backorders] + false + + + true + 1 + = + true + product[stock_data][use_config_backorders] + false + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + false + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + false + + + true + 0 + = + true + product[stock_data][qty_increments] + false + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + false + + + true + 1 + = + true + product[stock_data][is_in_stock] + false + + + true + + = + true + product[custom_design] + false + + + true + + = + true + product[custom_design_from] + false + + + true + + = + true + product[custom_design_to] + false + + + true + + = + true + product[custom_layout_update] + false + + + true + + = + true + product[page_layout] + false + + + true + container2 + = + true + product[options_container] + false + + + true + ${configurable_attribute_id} + = + true + product[configurable_variation] + false + + + true + ${configurable_product_name} + = + true + product[url_key] + + + true + 1 + = + true + product[use_config_gift_message_available] + + + true + 1 + = + true + product[use_config_gift_wrapping_available] + + + true + 4 + = + true + product[visibility] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 50 + = + true + product[stock_data][qty] + false + + + true + configurable + = + true + product[stock_data][type_id] + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/id/${configurable_product_id}/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + false + + + try { + int attributesCount = Integer.parseInt(vars.get("configurable_attribute_ids_matchNr")); + for (int i = 1; i <= attributesCount; i++) { + attributeId = vars.get("configurable_attribute_ids_" + i.toString()); + attributeCode = vars.get("configurable_attribute_codes_" + i.toString()); + attributeLabel = vars.get("configurable_attribute_labels_" + i.toString()); + ctx.getCurrentSampler().addArgument("attributes[" + (i - 1).toString() + "]", attributeId); + ctx.getCurrentSampler().addArgument("attribute_codes[" + (i - 1).toString() + "]", attributeCode); + ctx.getCurrentSampler().addArgument("product[" + attributeCode + "]", attributeId); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][position]", (i - 1).toString()); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attributeCode); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attributeLabel); + + int valuesCount = Integer.parseInt(vars.get("attribute_" + attributeId + "_values_matchNr")); + for (int j = 1; j <= valuesCount; j++) { + attributeValue = vars.get("attribute_" + attributeId + "_values_" + j.toString()); + ctx.getCurrentSampler().addArgument( + "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][include]", + "1" + ); + ctx.getCurrentSampler().addArgument( + "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][value_index]", + attributeValue + ); + } + } + ctx.getCurrentSampler().addArgument("associated_product_ids_serialized", vars.get("associated_products_ids").toString()); + } catch (Exception e) { + log.error("error???", e); + } + + + + + You saved the product + + Assertion.response_data + false + 2 + if have trouble see messages-message-error + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminReturnsManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Returns Management"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/orders_page.jmx + + + + Create New Order + + Assertion.response_data + false + 2 + + + + + + + + + true + sales_order_grid + = + true + namespace + + + true + + = + true + search + + + true + true + = + true + filters[placeholder] + + + true + 200 + = + true + paging[pageSize] + + + true + 1 + = + true + paging[current] + + + true + increment_id + = + true + sorting[field] + + + true + desc + = + true + sorting[direction] + + + true + true + = + true + isAjax + + + true + ${admin_form_key} + = + true + form_key + false + + + true + pending + = + true + filters[status] + true + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/open_orders.jmx + + + + totalRecords + + Assertion.response_data + false + 2 + + + + + + + + + true + ${admin_form_key} + = + true + form_key + + + true + sales_order_grid + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + 200 + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + increment_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + true + pending + = + true + filters[status] + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/search_orders.jmx + + + + totalRecords + + Assertion.response_data + false + 2 + + + + false + order_numbers + \"increment_id\":\"(\d+)\"\, + $1$ + + -1 + simple_products + + + + false + order_ids + \"entity_id\":\"(\d+)\"\, + $1$ + + -1 + simple_products + + + + + + mpaf/tool/fragments/ce/admin_create_process_returns/setup.jmx + + import java.util.ArrayList; + import java.util.HashMap; + import org.apache.jmeter.protocol.http.util.Base64Encoder; + import java.util.Random; + + // get count of "order_numbers" variable defined in "Search Pending Orders Limit" + int ordersCount = Integer.parseInt(vars.get("order_numbers_matchNr")); + + + int clusterLength; + int threadsNumber = ctx.getThreadGroup().getNumThreads(); + if (threadsNumber == 0) { + //Number of orders for one thread + clusterLength = ordersCount; + } else { + clusterLength = Math.round(ordersCount / threadsNumber); + if (clusterLength == 0) { + clusterLength = 1; + } + } + + //Current thread number starts from 0 + int currentThreadNum = ctx.getThreadNum(); + + //Index of the current product from the cluster + Random random = new Random(); + if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); + } + int iterator = random.nextInt(clusterLength); + if (iterator == 0) { + iterator = 1; + } + + int i = clusterLength * currentThreadNum + iterator; + + orderNumber = vars.get("order_numbers_" + i.toString()); + orderId = vars.get("order_ids_" + i.toString()); + vars.put("order_number", orderNumber); + vars.put("order_id", orderId); + + + + + false + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order/view/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/open_order.jmx + + + + #${order_number} + + Assertion.response_data + false + 2 + + + + false + order_status + <span id="order_status">([^<]+)</span> + $1$ + + 1 + simple_products + + + + + + "${order_status}" == "Pending" + false + mpaf/tool/fragments/ce/admin_edit_order/if_controller.jmx + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/start/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/invoice_start.jmx + + + + Invoice Totals + + Assertion.response_data + false + 2 + + + + false + item_ids + <div id="order_item_(\d+)_title"\s*class="product-title"> + $1$ + + -1 + simple_products + + + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + true + 1 + = + true + invoice[items][${item_ids_1}] + + + true + 1 + = + true + invoice[items][${item_ids_2}] + + + true + Invoiced + = + true + invoice[comment_text] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/invoice_submit.jmx + + + + The invoice has been created + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_creditmemo/start/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/credit_memo_start.jmx + + + + New Memo + + Assertion.response_data + false + 2 + + + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + true + 1 + = + true + creditmemo[items][${item_ids_1}][qty] + + + true + 1 + = + true + creditmemo[items][${item_ids_2}][qty] + + + true + 1 + = + true + creditmemo[do_offline] + + + true + Credit Memo added + = + true + creditmemo[comment_text] + + + true + 10 + = + true + creditmemo[shipping_amount] + + + true + 0 + = + true + creditmemo[adjustment_positive] + + + true + 0 + = + true + creditmemo[adjustment_negative] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_creditmemo/save/order_id/${order_id}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/credit_memo_full_refund.jmx + + + + You created the credit memo + + Assertion.response_data + false + 2 + + + + + + 1 + 0 + ${__javaScript(Math.round(${adminCreateProcessReturnsDelay}*1000))} + mpaf/tool/fragments/ce/admin_create_process_returns/pause.jmx + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminBrowseCustomerGridPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Browse Customer Grid"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + + vars.put("gridEntityType" , "Customer"); + + pagesCount = parseInt(vars.get("customers_page_size")) || 20; + vars.put("grid_entity_page_size" , pagesCount); + vars.put("grid_namespace" , "customer_listing"); + vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_customer_filter_text")); + vars.put("grid_filter_field", "name"); + + // set sort fields and sort directions + vars.put("grid_sort_field_1", "name"); + vars.put("grid_sort_field_2", "group_id"); + vars.put("grid_sort_field_3", "billing_country_id"); + vars.put("grid_sort_order_1", "asc"); + vars.put("grid_sort_order_2", "desc"); + + javascript + mpaf/tool/fragments/ce/admin_browse_customers_grid/setup.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; + var totalsRecord = parseInt(vars.get("entity_total_records")); + var pageCount = Math.round(totalsRecord/pageSize); + + vars.put("grid_pages_count", pageCount); + + javascript + + + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + ${grid_admin_browse_filter_text} + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; +var totalsRecord = parseInt(vars.get("entity_total_records")); +var pageCount = Math.round(totalsRecord/pageSize); + +vars.put("grid_pages_count_filtered", pageCount); + + javascript + + + + + + 1 + ${grid_pages_count} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + ${page_number} + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + 1 + ${grid_pages_count_filtered} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx + + + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx + + + + grid_sort_field + grid_sort_field + true + 0 + 3 + + + + grid_sort_order + grid_sort_order + true + 0 + 2 + + + + + + + true + ${grid_namespace} + = + true + namespace + false + + + true + ${grid_admin_browse_filter_text} + = + true + filters[${grid_filter_field}] + false + + + true + true + = + true + filters[placeholder] + false + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + false + + + true + ${page_number} + = + true + paging[current] + false + + + true + ${grid_sort_field} + = + true + sorting[field] + false + + + true + ${grid_sort_order} + = + true + sorting[direction] + false + + + true + true + = + true + isAjax + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminCreateOrderPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Create Order"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + javascript + + + + + vars.put("alabama_region_id", props.get("alabama_region_id")); + vars.put("california_region_id", props.get("california_region_id")); + + mpaf/tool/fragments/ce/common/get_region_data.jmx + + + + + + mpaf/tool/fragments/ce/admin_create_order/admin_create_order.jmx + import org.apache.jmeter.samplers.SampleResult; +import java.util.Random; +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom}); +} +number = random.nextInt(props.get("simple_products_list").size()); +simpleList = props.get("simple_products_list").get(number); +vars.put("simple_product_1_url_key", simpleList.get("url_key")); +vars.put("simple_product_1_name", simpleList.get("title")); +vars.put("simple_product_1_id", simpleList.get("id")); + +do { + number1 = random.nextInt(props.get("simple_products_list").size()); +} while(number == number1); +simpleList = props.get("simple_products_list").get(number1); +vars.put("simple_product_2_url_key", simpleList.get("url_key")); +vars.put("simple_product_2_name", simpleList.get("title")); +vars.put("simple_product_2_id", simpleList.get("id")); + +number = random.nextInt(props.get("configurable_products_list").size()); +configurableList = props.get("configurable_products_list").get(number); +vars.put("configurable_product_1_url_key", configurableList.get("url_key")); +vars.put("configurable_product_1_name", configurableList.get("title")); +vars.put("configurable_product_1_id", configurableList.get("id")); +vars.put("configurable_product_1_sku", configurableList.get("sku")); +vars.put("configurable_attribute_id", configurableList.get("attribute_id")); +vars.put("configurable_option_id", configurableList.get("attribute_option_id")); + + +customers_index = 0; +if (!props.containsKey("customer_ids_index")) { + props.put("customer_ids_index", customers_index); +} + +try { + customers_index = props.get("customer_ids_index"); + customers_list = props.get("customer_ids_list"); + + if (customers_index == customers_list.size()) { + customers_index=0; + } + vars.put("customer_id", customers_list.get(customers_index)); + props.put("customer_ids_index", ++customers_index); +} +catch (java.lang.Exception e) { + log.error("Caught Exception in 'Admin Create Order' thread."); + SampleResult.setStopThread(true); +} + + + true + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_create/start/ + GET + true + false + true + false + false + + Detected the start of a redirect chain + + + + + + + + Content-Type + application/json + + + Accept + */* + + + + + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/integration/admin/token + POST + true + false + true + false + false + + + + + admin_token + $ + + + BODY + + + + + ^[a-z0-9-]+$ + + Assertion.response_data + false + 1 + variable + admin_token + + + + + + + Authorization + Bearer ${admin_token} + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}rest/V1/configurable-products/${configurable_product_1_sku}/options/all + GET + true + false + true + false + false + + + + + attribute_ids + $.[*].attribute_id + NO_VALUE + + BODY + + + + option_values + $.[*].values[0].value_index + NO_VALUE + + BODY + + + + + + + + + true + item[${simple_product_1_id}][qty] + 1 + = + true + + + true + item[${simple_product_2_id}][qty] + 1 + = + true + + + true + item[${configurable_product_1_id}][qty] + 1 + = + true + + + true + customer_id + ${customer_id} + = + true + + + true + store_id + 1 + = + true + + + true + currency_id + + = + true + + + true + form_key + ${admin_form_key} + = + true + + + true + payment[method] + checkmo + = + true + + + true + reset_shipping + 1 + = + true + + + true + json + 1 + = + true + + + true + as_js_varname + iFrameResponse + = + true + + + true + form_key + ${admin_form_key} + = + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_create/loadBlock/block/search,items,shipping_method,totals,giftmessage,billing_method?isAjax=true + POST + true + false + true + false + false + + Detected the start of a redirect chain + + + + false + + + try { + attribute_ids = vars.get("attribute_ids"); + option_values = vars.get("option_values"); + attribute_ids = attribute_ids.replace("[","").replace("]","").replace("\"", ""); + option_values = option_values.replace("[","").replace("]","").replace("\"", ""); + attribute_ids_array = attribute_ids.split(","); + option_values_array = option_values.split(","); + args = ctx.getCurrentSampler().getArguments(); + it = args.iterator(); + while (it.hasNext()) { + argument = it.next(); + if (argument.getStringValue().contains("${")) { + args.removeArgument(argument.getName()); + } + } + for (int i = 0; i < attribute_ids_array.length; i++) { + + ctx.getCurrentSampler().addArgument("item[" + vars.get("configurable_product_1_id") + "][super_attribute][" + attribute_ids_array[i] + "]", option_values_array[i]); + } +} catch (Exception e) { + log.error("error???", e); +} + + + + + + + + true + collect_shipping_rates + 1 + = + true + + + true + customer_id + ${customer_id} + = + true + + + true + store_id + 1 + = + true + + + true + currency_id + false + = + true + + + true + form_key + ${admin_form_key} + = + true + + + true + payment[method] + checkmo + = + true + + + true + json + true + = + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_create/loadBlock/block/shipping_method,totals?isAjax=true + POST + true + false + true + false + false + + + + + + shipping_method + Flat Rate + + Assertion.response_data + false + 2 + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_create/index/ + GET + true + false + true + false + false + + Detected the start of a redirect chain + + + + + Select from existing customer addresses + Submit Order + Items Ordered + + Assertion.response_data + false + 2 + + + + + + + + true + form_key + ${admin_form_key} + = + true + + + true + limit + 20 + = + true + + + true + entity_id + + = + true + + + true + name + + = + true + + + true + email + + = + true + + + true + Telephone + + = + true + + + true + billing_postcode + + = + true + + + true + billing_country_id + + = + true + + + true + billing_regione + + = + true + + + true + store_name + + = + true + + + true + page + 1 + = + true + + + true + order[currency] + USD + = + true + + + true + sku + + = + true + + + true + qty + + = + true + + + true + limit + 20 + = + true + + + true + entity_id + + = + true + + + true + name + + = + true + + + true + sku + + = + true + + + true + price[from] + + = + true + + + true + price[to] + + = + true + + + true + in_products + + = + true + + + true + page + 1 + = + true + + + true + coupon_code + + = + true + + + true + order[account][group_id] + 1 + = + true + + + true + order[account][email] + user_${customer_id}@example.com + = + true + + + true + order[billing_address][customer_address_id] + + = + true + + + true + order[billing_address][prefix] + + = + true + + + true + order[billing_address][firstname] + Anthony + = + true + + + true + order[billing_address][middlename] + + = + true + + + true + order[billing_address][lastname] + Nealy + = + true + + + true + order[billing_address][suffix] + + = + true + + + true + order[billing_address][company] + + = + true + + + true + order[billing_address][street][0] + 123 Freedom Blvd. #123 + = + true + + + true + order[billing_address][street][1] + + = + true + + + true + order[billing_address][city] + Fayetteville + = + true + + + true + order[billing_address][country_id] + US + = + true + + + true + order[billing_address][region] + + = + true + + + true + order[billing_address][region_id] + ${alabama_region_id} + = + true + + + true + order[billing_address][postcode] + 123123 + = + true + + + true + order[billing_address][telephone] + 022-333-4455 + = + true + + + true + order[billing_address][fax] + + = + true + + + true + order[billing_address][vat_id] + + = + true + + + true + shipping_same_as_billing + on + = + true + + + true + payment[method] + checkmo + = + true + + + true + order[shipping_method] + flatrate_flatrate + = + true + + + true + order[comment][customer_note] + + = + true + + + true + order[comment][customer_note_notify] + 1 + = + true + + + true + order[send_confirmation] + 1 + = + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_create/save/ + POST + true + false + true + true + false + + Detected the start of a redirect chain + + + + false + order_id + ${host}${base_path}${admin_path}/sales/order/index/order_id/(\d+)/ + $1$ + + 1 + + + + false + order_item_1 + order_item_(\d+)_title + $1$ + + 1 + + + + false + order_item_2 + order_item_(\d+)_title + $1$ + + 2 + + + + false + order_item_3 + order_item_(\d+)_title + $1$ + + 3 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_item_1 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_item_2 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_item_3 + + + + + You created the order. + + Assertion.response_data + false + 2 + + + + + + + + true + form_key + ${admin_form_key} + = + true + + + true + invoice[items][${order_item_1}] + 1 + = + true + + + true + invoice[items][${order_item_2}] + 1 + = + true + + + true + invoice[items][${order_item_3}] + 1 + = + true + + + true + invoice[comment_text] + + = + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ + POST + true + false + true + false + false + + Detected the start of a redirect chain + + + + + The invoice has been created. + + Assertion.response_data + false + 2 + + + + + + + + true + form_key + ${admin_form_key} + = + true + + + true + shipment[items][${order_item_1}] + 1 + = + true + + + true + shipment[items][${order_item_2}] + 1 + = + true + + + true + shipment[items][${order_item_3}] + 1 + = + true + + + true + shipment[comment_text] + + = + true + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/order_shipment/save/order_id/${order_id}/ + POST + true + false + true + false + false + + Detected the start of a redirect chain + + + + + The shipment has been created. + + Assertion.response_data + false + 2 + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminCategoryManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Category Management"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + mpaf/tool/fragments/ce/admin_category_management/admin_category_management.jmx + + + + javascript + + + + random = new java.util.Random(); +if (${seedForRandom} > 0) { +random.setSeed(${seedForRandom} + ${__threadNum}); +} + +/** + * Get unique ids for fix concurrent category saving + */ +function getNextProductNumber(i) { + number = productsVariationsSize * ${__threadNum} - i; + if (number >= productsSize) { + log.info("${testLabel}: capacity of product list is not enough for support all ${adminPoolUsers} threads"); + return random.nextInt(productsSize); + } + return productsVariationsSize * ${__threadNum} - i; +} + +var productsVariationsSize = 5, + productsSize = props.get("simple_products_list_for_edit").size(); + + +for (i = 1; i<= productsVariationsSize; i++) { + var productVariablePrefix = "simple_product_" + i + "_"; + number = getNextProductNumber(i); + simpleList = props.get("simple_products_list_for_edit").get(number); + + vars.put(productVariablePrefix + "url_key", simpleList.get("url_key")); + vars.put(productVariablePrefix + "id", simpleList.get("id")); + vars.put(productVariablePrefix + "name", simpleList.get("title")); +} + +categoryIndex = random.nextInt(props.get("admin_category_ids_list").size()); +vars.put("parent_category_id", props.get("admin_category_ids_list").get(categoryIndex)); +do { +categoryIndexNew = random.nextInt(props.get("admin_category_ids_list").size()); +} while(categoryIndex == categoryIndexNew); +vars.put("new_parent_category_id", props.get("admin_category_ids_list").get(categoryIndexNew)); + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/ + GET + true + false + true + false + false + + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/edit/id/${parent_category_id}/ + GET + true + false + true + false + false + + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/add/store/0/parent/${parent_category_id} + GET + true + false + true + false + false + + + + + + <title>New Category + + Assertion.response_data + false + 2 + + + + + + + + true + + = + true + id + + + true + ${parent_category_id} + = + true + parent + + + true + + = + true + path + + + true + + = + true + store_id + + + true + 0 + = + true + is_active + + + true + 0 + = + true + include_in_menu + + + true + 1 + = + true + is_anchor + + + true + true + = + true + use_config[available_sort_by] + + + true + true + = + true + use_config[default_sort_by] + + + true + true + = + true + use_config[filter_price_range] + + + true + false + = + true + use_default[url_key] + + + true + 0 + = + true + url_key_create_redirect + + + true + 0 + = + true + custom_use_parent_settings + + + true + 0 + = + true + custom_apply_to_products + + + true + Admin Category Management ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + name + + + true + admin-category-management-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + url_key + + + true + + = + true + meta_title + + + true + + = + true + description + + + true + PRODUCTS + = + true + display_mode + + + true + position + = + true + default_sort_by + + + true + + = + true + meta_keywords + + + true + + = + true + meta_description + + + true + + = + true + custom_layout_update + + + false + {"${simple_product_1_id}":"","${simple_product_2_id}":"","${simple_product_3_id}":"","${simple_product_4_id}":"","${simple_product_5_id}":""} + = + true + category_products + + + true + ${admin_form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/save/ + POST + true + false + true + false + false + + + + + URL + admin_category_id + /catalog/category/edit/id/(\d+)/ + $1$ + + 1 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_id + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/edit/id/${admin_category_id}/ + GET + true + false + true + false + false + + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + false + admin_category_entity_id + "entity_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_attribute_set_id + "attribute_set_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_parent_id + "parent_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_created_at + "created_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_updated_at + "updated_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_path + "entity_id":(.+)"path":"([^\"]+)" + $2$ + + 1 + + + + false + admin_category_level + "level":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_name + "entity_id":(.+)"name":"([^"]+)" + $2$ + + 1 + + + + false + admin_category_url_key + "url_key":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_url_path + "url_path":"([^"]+)" + $1$ + + 1 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_entity_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_attribute_set_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_parent_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_created_at + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_updated_at + + + + + ^[\d\\\/]+$ + + Assertion.response_data + false + 1 + variable + admin_category_path + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_level + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_name + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_url_key + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_url_path + + + + + ${simple_product_1_name} + ${simple_product_2_name} + ${simple_product_3_name} + ${simple_product_4_name} + ${simple_product_5_name} + + Assertion.response_data + false + 2 + + + + + + + + true + ${admin_category_id} + = + true + id + + + true + ${admin_form_key} + = + true + form_key + + + true + append + = + true + point + + + true + ${new_parent_category_id} + = + true + pid + + + true + ${parent_category_id} + = + true + paid + + + true + 0 + = + true + aid + + + true + true + = + true + isAjax + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/move/ + POST + true + false + true + false + false + + + + + + + + true + ${admin_form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/delete/id/${admin_category_id}/ + POST + true + false + true + false + false + + + + + + You deleted the category. + + Assertion.response_data + false + 2 + + + + + 1 + 0 + ${__javaScript(Math.round(${adminCategoryManagementDelay}*1000))} + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminPromotionRulesPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Promotion Rules"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + mpaf/tool/fragments/ce/admin_promotions_management/admin_promotions_management.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales_rule/promo_quote/ + GET + true + false + true + false + false + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales_rule/promo_quote/new + GET + true + false + true + false + false + + + + + + + + true + true + = + true + isAjax + + + true + ${admin_form_key} + = + true + form_key + true + + + true + 1--1 + = + true + id + + + true + Magento\SalesRule\Model\Rule\Condition\Address|base_subtotal + = + true + type + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales_rule/promo_quote/newConditionHtml/form/sales_rule_formrule_conditions_fieldset_/form_namespace/sales_rule_form + POST + true + false + true + false + false + + + + + + + + true + Rule Name ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + name + + + true + 0 + = + true + is_active + + + true + 0 + = + true + use_auto_generation + + + true + 1 + = + true + is_rss + + + true + 0 + = + true + apply_to_shipping + + + true + 0 + = + true + stop_rules_processing + + + true + + = + true + coupon_code + + + true + + = + true + uses_per_coupon + + + true + + = + true + uses_per_customer + + + true + + = + true + sort_order + + + true + 5 + = + true + discount_amount + + + true + 0 + = + true + discount_qty + + + true + + = + true + discount_step + + + true + + = + true + reward_points_delta + + + true + + = + true + store_labels[0] + + + true + Rule Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + description + + + true + 1 + = + true + coupon_type + + + true + cart_fixed + = + true + simple_action + + + true + 1 + = + true + website_ids[0] + + + true + 0 + = + true + customer_group_ids[0] + + + true + + = + true + from_date + + + true + + = + true + to_date + + + true + Magento\SalesRule\Model\Rule\Condition\Combine + = + true + rule[conditions][1][type] + + + true + all + = + true + rule[conditions][1][aggregator] + + + true + 1 + = + true + rule[conditions][1][value] + + + true + Magento\SalesRule\Model\Rule\Condition\Address + = + true + rule[conditions][1--1][type] + + + true + base_subtotal + = + true + rule[conditions][1--1][attribute] + + + true + >= + = + true + rule[conditions][1--1][operator] + + + true + 100 + = + true + rule[conditions][1--1][value] + + + true + + = + true + rule[conditions][1][new_chlid] + + + true + Magento\SalesRule\Model\Rule\Condition\Product\Combine + = + true + rule[actions][1][type] + + + true + all + = + true + rule[actions][1][aggregator] + + + true + 1 + = + true + rule[actions][1][value] + + + true + + = + true + rule[actions][1][new_child] + + + true + + = + true + store_labels[1] + + + true + + = + true + store_labels[2] + + + true + + = + true + related_banners + + + true + ${admin_form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales_rule/promo_quote/save/ + POST + true + false + true + false + false + + + + + + You saved the rule. + + Assertion.response_data + false + 16 + + + + + 1 + 0 + ${__javaScript(Math.round(${adminPromotionsManagementDelay}*1000))} + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminCustomerManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Customer Management"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + mpaf/tool/fragments/ce/admin_customer_management/admin_customer_management.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/customer/index + GET + true + false + true + false + false + + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + + + + + true + customer_listing + = + true + namespace + + + true + + = + true + search + + + true + true + = + true + filters[placeholder] + + + true + 20 + = + true + paging[pageSize] + + + true + 1 + = + true + paging[current] + + + true + entity_id + = + true + sorting[field] + + + true + asc + = + true + sorting[direction] + + + true + true + = + true + isAjax + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + + X-Requested-With + XMLHttpRequest + + + + + + + + + + true + customer_listing + = + true + namespace + + + true + Lastname + = + true + search + + + true + true + = + true + filters[placeholder] + + + true + 20 + = + true + paging[pageSize] + + + true + 1 + = + true + paging[current] + + + true + entity_id + = + true + sorting[field] + + + true + asc + = + true + sorting[direction] + + + true + true + = + true + isAjax + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + + X-Requested-With + XMLHttpRequest + + + + + + false + customer_edit_url_path + actions":\{"edit":\{"href":"(?:http|https):\\/\\/(.*?)\\/customer\\/index\\/edit\\/id\\/(\d+)\\/", + /customer/index/edit/id/$2$/ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + customer_edit_url_path + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}${customer_edit_url_path} + GET + true + false + true + false + false + + + + + + Customer Information + + Assertion.response_data + false + 2 + + + + false + admin_customer_entity_id + "entity_id":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_website_id + "website_id":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_firstname + "firstname":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_lastname + "lastname":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_email + "email":"([^\@]+@[^.]+.[^"]+)" + $1$ + + 1 + + + + false + admin_customer_group_id + "group_id":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_store_id + "store_id":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_created_at + "created_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_updated_at + "updated_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_is_active + "is_active":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_disable_auto_group_change + "disable_auto_group_change":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_created_in + "created_in":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_dob + "dob":"(\d+)-(\d+)-(\d+)" + $2$/$3$/$1$ + + 1 + + + + false + admin_customer_default_billing + "default_billing":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_default_shipping + "default_shipping":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_gender + "gender":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_failures_num + "failures_num":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_address_entity_id + _address":\{"entity_id":"(\d+)".+?"parent_id":"${admin_customer_entity_id}" + $1$ + + 1 + + + + false + admin_customer_address_created_at + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"created_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_updated_at + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"updated_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_is_active + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"is_active":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_address_city + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"city":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_country_id + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"country_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_firstname + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"firstname":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_lastname + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"lastname":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_postcode + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"postcode":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_region + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"region":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_region_id + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"region_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_street + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"street":\["([^"]+)"\] + $1$ + + 1 + + + + false + admin_customer_address_telephone + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"telephone":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_customer_id + _address":\{.+?"parent_id":"${admin_customer_entity_id}".+?"customer_id":"([^"]+)" + $1$ + + 1 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_entity_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_website_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_firstname + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_lastname + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_email + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_group_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_store_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_created_at + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_updated_at + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_is_active + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_disable_auto_group_change + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_created_in + + + + + ^\d+/\d+/\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_dob + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_default_billing + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_default_shipping + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_gender + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_failures_num + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_entity_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_created_at + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_updated_at + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_is_active + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_city + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_country_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_firstname + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_lastname + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_postcode + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_region + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_region_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_street + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_telephone + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_customer_id + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + + + + + true + true + = + true + isAjax + + + true + ${admin_customer_entity_id} + = + true + customer[entity_id] + + + true + ${admin_customer_website_id} + = + true + customer[website_id] + + + true + ${admin_customer_email} + = + true + customer[email] + + + true + ${admin_customer_group_id} + = + true + customer[group_id] + + + true + ${admin_customer_store_id} + = + true + customer[store_id] + + + true + ${admin_customer_created_at} + = + true + customer[created_at] + + + true + ${admin_customer_updated_at} + = + true + customer[updated_at] + + + true + ${admin_customer_is_active} + = + true + customer[is_active] + + + true + ${admin_customer_disable_auto_group_change} + = + true + customer[disable_auto_group_change] + + + true + ${admin_customer_created_in} + = + true + customer[created_in] + + + true + + = + true + customer[prefix] + + + true + ${admin_customer_firstname} 1 + = + true + customer[firstname] + + + true + + = + true + customer[middlename] + + + true + ${admin_customer_lastname} 1 + = + true + customer[lastname] + + + true + + = + true + customer[suffix] + + + true + ${admin_customer_dob} + = + true + customer[dob] + + + true + ${admin_customer_default_billing} + = + true + customer[default_billing] + + + true + ${admin_customer_default_shipping} + = + true + customer[default_shipping] + + + true + + = + true + customer[taxvat] + + + true + ${admin_customer_gender} + = + true + customer[gender] + + + true + ${admin_customer_failures_num} + = + true + customer[failures_num] + + + true + ${admin_customer_store_id} + = + true + customer[sendemail_store_id] + + + true + ${admin_customer_address_entity_id} + = + true + address[${admin_customer_address_entity_id}][entity_id] + + + true + ${admin_customer_address_created_at} + = + true + address[${admin_customer_address_entity_id}][created_at] + + + true + ${admin_customer_address_updated_at} + = + true + address[${admin_customer_address_entity_id}][updated_at] + + + true + ${admin_customer_address_is_active} + = + true + address[${admin_customer_address_entity_id}][is_active] + + + true + ${admin_customer_address_city} + = + true + address[${admin_customer_address_entity_id}][city] + + + true + + = + true + address[${admin_customer_address_entity_id}][company] + + + true + ${admin_customer_address_country_id} + = + true + address[${admin_customer_address_entity_id}][country_id] + + + true + ${admin_customer_address_firstname} + = + true + address[${admin_customer_address_entity_id}][firstname] + + + true + ${admin_customer_address_lastname} + = + true + address[${admin_customer_address_entity_id}][lastname] + + + true + + = + true + address[${admin_customer_address_entity_id}][middlename] + + + true + ${admin_customer_address_postcode} + = + true + address[${admin_customer_address_entity_id}][postcode] + + + true + + = + true + address[${admin_customer_address_entity_id}][prefix] + + + true + ${admin_customer_address_region} + = + true + address[${admin_customer_address_entity_id}][region] + + + true + ${admin_customer_address_region_id} + = + true + address[${admin_customer_address_entity_id}][region_id] + + + true + ${admin_customer_address_street} + = + true + address[${admin_customer_address_entity_id}][street][0] + + + true + + = + true + address[${admin_customer_address_entity_id}][street][1] + + + true + + = + true + address[${admin_customer_address_entity_id}][suffix] + + + true + ${admin_customer_address_telephone} + = + true + address[${admin_customer_address_entity_id}][telephone] + + + true + + = + true + address[${admin_customer_address_entity_id}][vat_id] + + + true + ${admin_customer_address_customer_id} + = + true + address[${admin_customer_address_entity_id}][customer_id] + + + true + true + = + true + address[${admin_customer_address_entity_id}][default_billing] + + + true + true + = + true + address[${admin_customer_address_entity_id}][default_shipping] + + + true + + = + true + address[new_0][prefix] + + + true + John + = + true + address[new_0][firstname] + + + true + + = + true + address[new_0][middlename] + + + true + Doe + = + true + address[new_0][lastname] + + + true + + = + true + address[new_0][suffix] + + + true + Test Company + = + true + address[new_0][company] + + + true + Folsom + = + true + address[new_0][city] + + + true + 95630 + = + true + address[new_0][postcode] + + + true + 1234567890 + = + true + address[new_0][telephone] + + + true + + = + true + address[new_0][vat_id] + + + true + false + = + true + address[new_0][default_billing] + + + true + false + = + true + address[new_0][default_shipping] + + + true + 123 Main + = + true + address[new_0][street][0] + + + true + + = + true + address[new_0][street][1] + + + true + + = + true + address[new_0][region] + + + true + US + = + true + address[new_0][country_id] + + + true + ${admin_customer_address_region_id} + = + true + address[new_0][region_id] + + + true + ${admin_form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/customer/index/validate/ + POST + true + false + true + false + false + + + + + + 200 + + Assertion.response_code + false + 16 + + + + + + + + true + true + = + true + isAjax + + + true + ${admin_customer_entity_id} + = + true + customer[entity_id] + + + true + ${admin_customer_website_id} + = + true + customer[website_id] + + + true + ${admin_customer_email} + = + true + customer[email] + + + true + ${admin_customer_group_id} + = + true + customer[group_id] + + + true + ${admin_customer_store_id} + = + true + customer[store_id] + + + true + ${admin_customer_created_at} + = + true + customer[created_at] + + + true + ${admin_customer_updated_at} + = + true + customer[updated_at] + + + true + ${admin_customer_is_active} + = + true + customer[is_active] + + + true + ${admin_customer_disable_auto_group_change} + = + true + customer[disable_auto_group_change] + + + true + ${admin_customer_created_in} + = + true + customer[created_in] + + + true + + = + true + customer[prefix] + + + true + ${admin_customer_firstname} 1 + = + true + customer[firstname] + + + true + + = + true + customer[middlename] + + + true + ${admin_customer_lastname} 1 + = + true + customer[lastname] + + + true + + = + true + customer[suffix] + + + true + ${admin_customer_dob} + = + true + customer[dob] + + + true + ${admin_customer_default_billing} + = + true + customer[default_billing] + + + true + ${admin_customer_default_shipping} + = + true + customer[default_shipping] + + + true + + = + true + customer[taxvat] + + + true + ${admin_customer_gender} + = + true + customer[gender] + + + true + ${admin_customer_failures_num} + = + true + customer[failures_num] + + + true + ${admin_customer_store_id} + = + true + customer[sendemail_store_id] + + + true + ${admin_customer_address_entity_id} + = + true + address[${admin_customer_address_entity_id}][entity_id] + + + + true + ${admin_customer_address_created_at} + = + true + address[${admin_customer_address_entity_id}][created_at] + + + true + ${admin_customer_address_updated_at} + = + true + address[${admin_customer_address_entity_id}][updated_at] + + + true + ${admin_customer_address_is_active} + = + true + address[${admin_customer_address_entity_id}][is_active] + + + true + ${admin_customer_address_city} + = + true + address[${admin_customer_address_entity_id}][city] + + + true + + = + true + address[${admin_customer_address_entity_id}][company] + + + true + ${admin_customer_address_country_id} + = + true + address[${admin_customer_address_entity_id}][country_id] + + + true + ${admin_customer_address_firstname} + = + true + address[${admin_customer_address_entity_id}][firstname] + + + true + ${admin_customer_address_lastname} + = + true + address[${admin_customer_address_entity_id}][lastname] + + + true + + = + true + address[${admin_customer_address_entity_id}][middlename] + + + true + ${admin_customer_address_postcode} + = + true + address[${admin_customer_address_entity_id}][postcode] + + + true + + = + true + address[${admin_customer_address_entity_id}][prefix] + + + true + ${admin_customer_address_region} + = + true + address[${admin_customer_address_entity_id}][region] + + + true + ${admin_customer_address_region_id} + = + true + address[${admin_customer_address_entity_id}][region_id] + + + true + ${admin_customer_address_street} + = + true + address[${admin_customer_address_entity_id}][street][0] + + + true + + = + true + address[${admin_customer_address_entity_id}][street][1] + + + true + + = + true + address[${admin_customer_address_entity_id}][suffix] + + + true + ${admin_customer_address_telephone} + = + true + address[${admin_customer_address_entity_id}][telephone] + + + true + + = + true + address[${admin_customer_address_entity_id}][vat_id] + + + true + ${admin_customer_address_customer_id} + = + true + address[${admin_customer_address_entity_id}][customer_id] + + + true + true + = + true + address[${admin_customer_address_entity_id}][default_billing] + + + true + true + = + true + address[${admin_customer_address_entity_id}][default_shipping] + + + true + + = + true + address[new_0][prefix] + + + true + John + = + true + address[new_0][firstname] + + + true + + = + true + address[new_0][middlename] + + + true + Doe + = + true + address[new_0][lastname] + + + true + + = + true + address[new_0][suffix] + + + true + Test Company + = + true + address[new_0][company] + + + true + Folsom + = + true + address[new_0][city] + + + true + 95630 + = + true + address[new_0][postcode] + + + true + 1234567890 + = + true + address[new_0][telephone] + + + true + + = + true + address[new_0][vat_id] + + + true + false + = + true + address[new_0][default_billing] + + + true + false + = + true + address[new_0][default_shipping] + + + true + 123 Main + = + true + address[new_0][street][0] + + + true + + = + true + address[new_0][street][1] + + + true + + = + true + address[new_0][region] + + + true + US + = + true + address[new_0][country_id] + + + true + 12 + = + true + address[new_0][region_id] + + + true + ${admin_form_key} + = + true + form_key + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/customer/index/save/ + POST + true + false + true + true + false + + + + + + You saved the customer. + + Assertion.response_data + false + 2 + + + + + 1 + 0 + ${__javaScript(Math.round(${adminCustomerManagementDelay}*1000))} + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${cAdminEditOrderPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "[C] Admin Edit Order"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUserListIterator = props.get("adminUserListIterator"); +adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + +if (adminUsersDistribution == 1) { + adminUser = adminUserList.poll(); +} else { + if (!adminUserListIterator.hasNext()) { + adminUserListIterator = adminUserList.descendingIterator(); + } + + adminUser = adminUserListIterator.next(); +} + +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/orders_page.jmx + + + + Create New Order + + Assertion.response_data + false + 2 + + + + + + + + + true + sales_order_grid + = + true + namespace + + + true + + = + true + search + + + true + true + = + true + filters[placeholder] + + + true + 200 + = + true + paging[pageSize] + + + true + 1 + = + true + paging[current] + + + true + increment_id + = + true + sorting[field] + + + true + desc + = + true + sorting[direction] + + + true + true + = + true + isAjax + + + true + ${admin_form_key} + = + true + form_key + false + + + true + pending + = + true + filters[status] + true + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/open_orders.jmx + + + + totalRecords + + Assertion.response_data + false + 2 + + + + + + + + + true + ${admin_form_key} + = + true + form_key + + + true + sales_order_grid + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + 200 + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + increment_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + true + pending + = + true + filters[status] + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/search_orders.jmx + + + + totalRecords + + Assertion.response_data + false + 2 + + + + false + order_numbers + \"increment_id\":\"(\d+)\"\, + $1$ + + -1 + simple_products + + + + false + order_ids + \"entity_id\":\"(\d+)\"\, + $1$ + + -1 + simple_products + + + + + + mpaf/tool/fragments/ce/admin_create_process_returns/setup.jmx + + import java.util.ArrayList; + import java.util.HashMap; + import org.apache.jmeter.protocol.http.util.Base64Encoder; + import java.util.Random; + + // get count of "order_numbers" variable defined in "Search Pending Orders Limit" + int ordersCount = Integer.parseInt(vars.get("order_numbers_matchNr")); + + + int clusterLength; + int threadsNumber = ctx.getThreadGroup().getNumThreads(); + if (threadsNumber == 0) { + //Number of orders for one thread + clusterLength = ordersCount; + } else { + clusterLength = Math.round(ordersCount / threadsNumber); + if (clusterLength == 0) { + clusterLength = 1; + } + } + + //Current thread number starts from 0 + int currentThreadNum = ctx.getThreadNum(); + + //Index of the current product from the cluster + Random random = new Random(); + if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); + } + int iterator = random.nextInt(clusterLength); + if (iterator == 0) { + iterator = 1; + } + + int i = clusterLength * currentThreadNum + iterator; + + orderNumber = vars.get("order_numbers_" + i.toString()); + orderId = vars.get("order_ids_" + i.toString()); + vars.put("order_number", orderNumber); + vars.put("order_id", orderId); + + + + + false + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order/view/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/open_order.jmx + + + + #${order_number} + + Assertion.response_data + false + 2 + + + + false + order_status + <span id="order_status">([^<]+)</span> + $1$ + + 1 + simple_products + + + + + + "${order_status}" == "Pending" + false + mpaf/tool/fragments/ce/admin_edit_order/if_controller.jmx + + + + + + true + pending + = + true + history[status] + false + + + true + Some text + = + true + history[comment] + + + true + ${admin_form_key} + = + true + form_key + false + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order/addComment/order_id/${order_id}/?isAjax=true + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_edit_order/add_comment.jmx + + + + Not Notified + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/start/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/invoice_start.jmx + + + + Invoice Totals + + Assertion.response_data + false + 2 + + + + false + item_ids + <div id="order_item_(\d+)_title"\s*class="product-title"> + $1$ + + -1 + simple_products + + + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + true + 1 + = + true + invoice[items][${item_ids_1}] + + + true + 1 + = + true + invoice[items][${item_ids_2}] + + + true + Invoiced + = + true + invoice[comment_text] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/invoice_submit.jmx + + + + The invoice has been created + + Assertion.response_data + false + 2 + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/order_shipment/start/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_edit_order/shipment_start.jmx + + + + New Shipment + + Assertion.response_data + false + 2 + + + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + true + 1 + = + true + shipment[items][${item_ids_1}] + + + true + 1 + = + true + shipment[items][${item_ids_2}] + + + true + Shipped + = + true + shipment[comment_text] + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/order_shipment/save/order_id/${order_id}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_edit_order/shipment_submit.jmx + + + + The shipment has been created + + Assertion.response_data + false + 2 + + + + + + + + + + + + + 60000 + 200000 + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + + adminUsersDistribution = Integer.parseInt(vars.get("admin_users_distribution_per_admin_pool")); + if (adminUsersDistribution == 1) { + adminUserList = props.get("adminUserList"); + adminUserList.add(vars.get("admin_user")); + } + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + +