diff --git a/docs/merge_points/extend-action-groups.md b/docs/merge_points/extend-action-groups.md new file mode 100644 index 000000000..1f307e796 --- /dev/null +++ b/docs/merge_points/extend-action-groups.md @@ -0,0 +1,98 @@ +# Extend action groups + +Extending an action group doesn't affect the existing action group. + +In this example we add a `` command to check the checkbox that our extension added with a new action group for the simple product creation form. + +## Starting action group + +```xml + + + + + + + + + + + + + + + + + + + + + + + +``` + +## File to merge + +```xml + + + + +``` + +## Resultant action group + +Note that there are now two action groups below. + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` \ No newline at end of file diff --git a/docs/merge_points/extend-data.md b/docs/merge_points/extend-data.md new file mode 100644 index 000000000..344d11935 --- /dev/null +++ b/docs/merge_points/extend-data.md @@ -0,0 +1,70 @@ +# Extend data entities + +Extending an action group doesn't affect the existing action group. + +In this example we add a `` command to check the checkbox that our extension added with a new action group for the simple product creation form. + +## Starting entity + +```xml + + SimpleProduct + simple + 4 + SimpleProduct + 123.00 + 4 + 1 + 1000 + simpleproduct + 1 + EavStockItem + CustomAttributeCategoryIds + +``` + +## File to merge + +```xml + + + 1001 + dataHere + +``` + +## Resultant entity + +Note that there are now two data entities below. + +```xml + + SimpleProduct + simple + 4 + SimpleProduct + 123.00 + 4 + 1 + 1000 + simpleproduct + 1 + EavStockItem + CustomAttributeCategoryIds + + + SimpleProduct + simple + 4 + SimpleProduct + 123.00 + 4 + 1 + 1001 + simpleproduct + 1 + EavStockItem + CustomAttributeCategoryIds + dataHere + +``` \ No newline at end of file diff --git a/docs/merge_points/extend-tests.md b/docs/merge_points/extend-tests.md new file mode 100644 index 000000000..7398e273d --- /dev/null +++ b/docs/merge_points/extend-tests.md @@ -0,0 +1,145 @@ +# Extend tests + +Data objects can be merged to cover the needs of your extension. + +In this example, we add an action group to a new copy of the original test for our extension. + +## Starting test + +```xml + + + + + + <description value="Admin should be able to create a Simple Product"/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-23414"/> + <group value="product"/> + </annotations> + <before> + <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> + </before> + <after> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + </after> + + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin1"/> + <actionGroup ref="FillAdminSimpleProductForm" stepKey="fillProductFieldsInAdmin"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="simpleProduct" value="_defaultProduct"/> + </actionGroup> + <actionGroup ref="AssertProductInStorefrontCategoryPage" stepKey="assertProductInStorefront1"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="product" value="_defaultProduct"/> + </actionGroup> + <actionGroup ref="AssertProductInStorefrontProductPage" stepKey="assertProductInStorefront2"> + <argument name="product" value="_defaultProduct"/> + </actionGroup> +</test> +``` + +## File to merge + +```xml +<test name="AdminCreateSimpleProductExtensionTest" extends="AdminCreateSimpleProductTest"> + <!-- Since this is its own test you need the annotations block --> + <annotations> + <features value="Catalog"/> + <stories value="Create a Simple Product via Admin"/> <!-- you should leave this the same since it is part of the same group --> + <title value="Admin should be able to create a Simple Product with my extension"/> + <description value="Admin should be able to create a Simple Product with my extension via the product grid"/> + <severity value="CRITICAL"/> + <testCaseId value="Extension/Github Issue Number"/> + <group value="product"/> + </annotations> + <!-- This will be added after the step "fillProductFieldsInAdmin" on line 20 in the above test. --> + <actionGroup ref="AddMyExtensionData" stepKey="extensionField" after="fillProductFieldsInAdmin"> + <argument name="extensionData" value="_myData"/> + </actionGroup> + + <!-- This will be added after the step "assertProductInStorefront2" on line 28 in the above test. --> + <actionGroup ref="AssertMyExtensionDataExists" stepKey="assertExtensionInformation" after="assertProductInStorefront2"> + <argument name="extensionData" value="_myData"/> + </actionGroup> +</test> +``` + +## Resultant test + +Note that there are now two tests below. + +```xml +<test name="AdminCreateSimpleProductTest"> + <annotations> + <features value="Catalog"/> + <stories value="Create a Simple Product via Admin"/> + <title value="Admin should be able to create a Simple Product"/> + <description value="Admin should be able to create a Simple Product"/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-23414"/> + <group value="product"/> + </annotations> + <before> + <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> + </before> + <after> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + </after> + + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin1"/> + <actionGroup ref="FillAdminSimpleProductForm" stepKey="fillProductFieldsInAdmin"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="simpleProduct" value="_defaultProduct"/> + </actionGroup> + <actionGroup ref="AssertProductInStorefrontCategoryPage" stepKey="assertProductInStorefront1"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="product" value="_defaultProduct"/> + </actionGroup> + <actionGroup ref="AssertProductInStorefrontProductPage" stepKey="assertProductInStorefront2"> + <argument name="product" value="_defaultProduct"/> + </actionGroup> +</test> +<test name="AdminCreateSimpleProductExtensionTest"> + <annotations> + <features value="Catalog"/> + <stories value="Create a Simple Product via Admin"/> + <title value="Admin should be able to create a Simple Product with my extension"/> + <description value="Admin should be able to create a Simple Product with my extension via the product grid"/> + <severity value="CRITICAL"/> + <testCaseId value="Extension/Github Issue Number"/> + <group value="product"/> + </annotations> + <before> + <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> + </before> + <after> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + </after> + + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin1"/> + <actionGroup ref="FillAdminSimpleProductForm" stepKey="fillProductFieldsInAdmin"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="simpleProduct" value="_defaultProduct"/> + </actionGroup> + + <actionGroup ref="AddMyExtensionData" stepKey="extensionField"> + <argument name="extensionData" value="_myData"/> + </actionGroup> + + <actionGroup ref="AssertProductInStorefrontCategoryPage" stepKey="assertProductInStorefront1"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="product" value="_defaultProduct"/> + </actionGroup> + <actionGroup ref="AssertProductInStorefrontProductPage" stepKey="assertProductInStorefront2"> + <argument name="product" value="_defaultProduct"/> + </actionGroup> + + <actionGroup ref="AssertMyExtensionDataExists" stepKey="assertExtensionInformation"> + <argument name="extensionData" value="_myData"/> + </actionGroup> +</test> +``` \ No newline at end of file diff --git a/docs/merge_points/introduction.md b/docs/merge_points/introduction.md new file mode 100644 index 000000000..891f6e3fe --- /dev/null +++ b/docs/merge_points/introduction.md @@ -0,0 +1,39 @@ +# Merge Points for testing extensions in MFTF + +The Magento Functional Testing Framework (MFTF) allows great flexibility when writing XML tests for extensions. +All parts of tests can be used, reused, and merged to best suit your needs and cut down on needless duplication. + +Extension developers can utilitze these merge points to leverage existing tests and modify just the parts needed to test their extension. For instance, if your extension adds a form field to a Catalog admin page, you can modify the existing Catalog tests and add actions, data, etc as needed to test the custom field. +This topic shows how to merge and reuse test elements when testing extensions. + +## Merging + +Follow the links below for an example of how to merge: + +- [Merge Action Groups][] +- [Merge Data][] +- [Merge Pages][] +- [Merge Sections][] +- [Merge Tests][] + +## Extending + +Only Test, Action Group, and Data objects in the MFTF Framework can be extended. +Extending can be very useful for extension developers since it will not affect existing tests. + +Consult [when to use Extends][] to use extends when deciding whether to merge or extend. + +- [Extend Action Groups][] +- [Extend Data][] +- [Extend Tests][] + +<!-- Link definitions --> +[when to use Extends]: https://devdocs.magento.com/mftf/docs/best-practices.html#when-to-use-extends +[Merge Action Groups]: https://devdocs.magento.com/mftf/docs/merge_points/merge-action-groups.html +[Merge Data]: https://devdocs.magento.com/mftf/docs/merge_points/merge-data.html +[Merge Pages]: https://devdocs.magento.com/mftf/docs/merge_points/merge-pages.html +[Merge Sections]: https://devdocs.magento.com/mftf/docs/merge_points/merge-sections.html +[Merge Tests]: https://devdocs.magento.com/mftf/docs/merge_points/merge-tests.html +[Extend Action Groups]: https://devdocs.magento.com/mftf/docs/merge_points/extend-action-groups.html +[Extend Data]: https://devdocs.magento.com/mftf/docs/merge_points/extend-data.html +[Extend Tests]: https://devdocs.magento.com/mftf/docs/merge_points/extend-tests.html \ No newline at end of file diff --git a/docs/merge_points/merge-action-groups.md b/docs/merge_points/merge-action-groups.md new file mode 100644 index 000000000..0485e7287 --- /dev/null +++ b/docs/merge_points/merge-action-groups.md @@ -0,0 +1,74 @@ +# Merge action groups + +An action group is a set of individual actions working together as a group. +These action groups can be shared between tests and they also be modified to your needs. + +In this example we add a `<click>` command to check the checkbox that our extension adds to the simple product creation form. + +## Starting test + +```xml +<actionGroup name="FillAdminSimpleProductForm"> + <arguments> + <argument name="category"/> + <argument name="simpleProduct"/> + </arguments> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="navigateToProductIndex"/> + <click selector="{{AdminProductGridActionSection.addProductToggle}}" stepKey="clickAddProductDropdown"/> + <click selector="{{AdminProductGridActionSection.addSimpleProduct}}" stepKey="clickAddSimpleProduct"/> + <fillField userInput="{{simpleProduct.name}}" selector="{{AdminProductFormSection.productName}}" stepKey="fillName"/> + <fillField userInput="{{simpleProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" stepKey="fillSKU"/> + <fillField userInput="{{simpleProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" stepKey="fillPrice"/> + <fillField userInput="{{simpleProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" stepKey="fillQuantity"/> + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[{{category.name}}]" stepKey="searchAndSelectCategory"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" stepKey="openSeoSection"/> + <fillField userInput="{{simpleProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" stepKey="fillUrlKey"/> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveProduct"/> + <seeElement selector="{{AdminProductMessagesSection.successMessage}}" stepKey="assertSaveMessageSuccess"/> + <seeInField userInput="{{simpleProduct.name}}" selector="{{AdminProductFormSection.productName}}" stepKey="assertFieldName"/> + <seeInField userInput="{{simpleProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" stepKey="assertFieldSku"/> + <seeInField userInput="{{simpleProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" stepKey="assertFieldPrice"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" stepKey="openSeoSectionAssert"/> + <seeInField userInput="{{simpleProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" stepKey="assertFieldUrlKey"/> +</actionGroup> +``` + +## File to merge + +```xml +<actionGroup name="FillAdminSimpleProductForm"> + <!-- This will be added after the step "fillQuantity" in the above test. --> + <click selector="{{MyExtensionSection.myCheckbox}}" stepKey="clickMyCheckbox" after="fillQuantity"/> +</actionGroup> +``` + +## Resultant test + +```xml +<actionGroup name="FillAdminSimpleProductForm"> + <arguments> + <argument name="category"/> + <argument name="simpleProduct"/> + </arguments> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="navigateToProductIndex"/> + <click selector="{{AdminProductGridActionSection.addProductToggle}}" stepKey="clickAddProductDropdown"/> + <click selector="{{AdminProductGridActionSection.addSimpleProduct}}" stepKey="clickAddSimpleProduct"/> + <fillField userInput="{{simpleProduct.name}}" selector="{{AdminProductFormSection.productName}}" stepKey="fillName"/> + <fillField userInput="{{simpleProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" stepKey="fillSKU"/> + <fillField userInput="{{simpleProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" stepKey="fillPrice"/> + <fillField userInput="{{simpleProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" stepKey="fillQuantity"/> + <!-- Merged line here --> + <click selector="{{MyExtensionSection.myCheckbox}}" stepKey="clickMyCheckbox"/> + + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[{{category.name}}]" stepKey="searchAndSelectCategory"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" stepKey="openSeoSection"/> + <fillField userInput="{{simpleProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" stepKey="fillUrlKey"/> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveProduct"/> + <seeElement selector="{{AdminProductMessagesSection.successMessage}}" stepKey="assertSaveMessageSuccess"/> + <seeInField userInput="{{simpleProduct.name}}" selector="{{AdminProductFormSection.productName}}" stepKey="assertFieldName"/> + <seeInField userInput="{{simpleProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" stepKey="assertFieldSku"/> + <seeInField userInput="{{simpleProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" stepKey="assertFieldPrice"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" stepKey="openSeoSectionAssert"/> + <seeInField userInput="{{simpleProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" stepKey="assertFieldUrlKey"/> +</actionGroup> +``` \ No newline at end of file diff --git a/docs/merge_points/merge-data.md b/docs/merge_points/merge-data.md new file mode 100644 index 000000000..b3342cc46 --- /dev/null +++ b/docs/merge_points/merge-data.md @@ -0,0 +1,56 @@ +# Merge data + +Data objects can be merged to cover the needs of your extension. + +In this example we update the `quantity` to `1001` and add a new piece of data relevant to our extension. This will affect all other tests that use this data. + +## Starting entity + +```xml +<entity name="SimpleProduct" type="product"> + <data key="sku" unique="suffix">SimpleProduct</data> + <data key="type_id">simple</data> + <data key="attribute_set_id">4</data> + <data key="name" unique="suffix">SimpleProduct</data> + <data key="price">123.00</data> + <data key="visibility">4</data> + <data key="status">1</data> + <data key="quantity">1000</data> + <data key="urlKey" unique="suffix">simpleproduct</data> + <data key="weight">1</data> + <requiredEntity type="product_extension_attribute">EavStockItem</requiredEntity> + <requiredEntity type="custom_attribute_array">CustomAttributeCategoryIds</requiredEntity> +</entity> +``` + +## File to merge + +```xml +<entity name="SimpleProduct" type="product"> + <!-- myExtensionData will simply be added to the product and quantity will be changed to 1001. --> + <data key="quantity">1001</data> + <data key="myExtensionData">dataHere</data> +</entity> +``` + +## Resultant entity + +```xml +<entity name="SimpleProduct" type="product"> + <data key="sku" unique="suffix">SimpleProduct</data> + <data key="type_id">simple</data> + <data key="attribute_set_id">4</data> + <data key="name" unique="suffix">SimpleProduct</data> + <data key="price">123.00</data> + <data key="visibility">4</data> + <data key="status">1</data> + <!-- Quantity updated --> + <data key="quantity">1001</data> + <data key="urlKey" unique="suffix">simpleproduct</data> + <data key="weight">1</data> + <requiredEntity type="product_extension_attribute">EavStockItem</requiredEntity> + <requiredEntity type="custom_attribute_array">CustomAttributeCategoryIds</requiredEntity> + <!-- Data key merged --> + <data key="myExtensionData">dataHere</data> +</entity> +``` \ No newline at end of file diff --git a/docs/merge_points/merge-pages.md b/docs/merge_points/merge-pages.md new file mode 100644 index 000000000..c7a3e8fa8 --- /dev/null +++ b/docs/merge_points/merge-pages.md @@ -0,0 +1,50 @@ +# Merge pages + +Sections can be merged into pages to cover your extension. + +In this example we add a section that may be relevant to our extension to the list of sections underneath one page. + +## Starting page + +```xml +<page name="AdminCategoryPage" url="catalog/category/" area="admin" module="Magento_Catalog"> + <section name="AdminCategorySidebarActionSection"/> + <section name="AdminCategoryMainActionsSection"/> + <section name="AdminCategorySidebarTreeSection"/> + <section name="AdminCategoryBasicFieldSection"/> + <section name="AdminCategorySEOSection"/> + <section name="AdminCategoryProductsSection"/> + <section name="AdminCategoryProductsGridSection"/> + <section name="AdminCategoryModalSection"/> + <section name="AdminCategoryMessagesSection"/> + <section name="AdminCategoryContentSection"/> +</page> +``` + +## File to merge + +```xml +<page name="AdminCategoryPage" url="catalog/category/" area="admin" module="Magento_Catalog"> + <!-- myExtensionSection will simply be added to the page --> + <section name="MyExtensionSection"/> +</page> +``` + +## Resultant page + +```xml +<page name="AdminCategoryPage"> + <section name="AdminCategorySidebarActionSection"/> + <section name="AdminCategoryMainActionsSection"/> + <section name="AdminCategorySidebarTreeSection"/> + <section name="AdminCategoryBasicFieldSection"/> + <section name="AdminCategorySEOSection"/> + <section name="AdminCategoryProductsSection"/> + <section name="AdminCategoryProductsGridSection"/> + <section name="AdminCategoryModalSection"/> + <section name="AdminCategoryMessagesSection"/> + <section name="AdminCategoryContentSection"/> + <!-- New section merged --> + <section name="MyExtensionSection"/> +</page> +``` \ No newline at end of file diff --git a/docs/merge_points/merge-sections.md b/docs/merge_points/merge-sections.md new file mode 100644 index 000000000..e9f5acb55 --- /dev/null +++ b/docs/merge_points/merge-sections.md @@ -0,0 +1,43 @@ +# Merge sections + +Sections can be merged together to cover your extension. + +In this example we add another selector to the section on the products page section. + +## Starting section + +```xml +<section name="ProductsPageSection"> + <element name="addProductButton" type="button" selector="//button[@id='add_new_product-button']"/> + <element name="checkboxForProduct" type="button" selector="//*[contains(text(),'{{args}}')]/parent::td/preceding-sibling::td/label[@class='data-grid-checkbox-cell-inner']" parameterized="true"/> + <element name="actions" type="button" selector="//div[@class='col-xs-2']/div[@class='action-select-wrap']/button[@class='action-select']"/> + <element name="delete" type="button" selector="//*[contains(@class,'admin__data-grid-header-row row row-gutter')]//*[text()='Delete']"/> + <element name="ok" type="button" selector="//button[@data-role='action']//span[text()='OK']"/> + <element name="deletedSuccessMessage" type="button" selector="//*[@class='message message-success success']"/> +</section> +``` + +## File to merge + +```xml +<section name="ProductsPageSection"> + <!-- myExtensionElement will simply be added to the page --> + <element name="myExtensionElement" type="button" selector="input.myExtension"/> +</section> +``` + +## Resultant section + +```xml +<section name="ProductsPageSection"> + <element name="addProductButton" type="button" selector="//button[@id='add_new_product-button']"/> + <element name="checkboxForProduct" type="button" selector="//*[contains(text(),'{{args}}')]/parent::td/preceding-sibling::td/label[@class='data-grid-checkbox-cell-inner']" parameterized="true"/> + <element name="actions" type="button" selector="//div[@class='col-xs-2']/div[@class='action-select-wrap']/button[@class='action-select']"/> + <element name="delete" type="button" selector="//*[contains(@class,'admin__data-grid-header-row row row-gutter')]//*[text()='Delete']"/> + <element name="ok" type="button" selector="//button[@data-role='action']//span[text()='OK']"/> + <element name="deletedSuccessMessage" type="button" selector="//*[@class='message message-success success']"/> + <!-- New element merged --> + <element name="myExtensionElement" type="button" selector="input.myExtension"/> +</section> +</page> +``` \ No newline at end of file diff --git a/docs/merge_points/merge-tests.md b/docs/merge_points/merge-tests.md new file mode 100644 index 000000000..3958410e9 --- /dev/null +++ b/docs/merge_points/merge-tests.md @@ -0,0 +1,102 @@ +# Merge tests + +Tests can be merged to create a new test that covers new extension capabilities. + +In this example we add an action group that modifies the original test to interact with our extension sending in data we created. + +## Starting test + +```xml +<test name="AdminCreateSimpleProductTest"> + <annotations> + <features value="Catalog"/> + <stories value="Create a Simple Product via Admin"/> + <title value="Admin should be able to create a Simple Product"/> + <description value="Admin should be able to create a Simple Product"/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-23414"/> + <group value="product"/> + </annotations> + <before> + <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> + </before> + <after> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + </after> + + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin1"/> + <actionGroup ref="FillAdminSimpleProductForm" stepKey="fillProductFieldsInAdmin"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="simpleProduct" value="_defaultProduct"/> + </actionGroup> + <actionGroup ref="AssertProductInStorefrontCategoryPage" stepKey="assertProductInStorefront1"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="product" value="_defaultProduct"/> + </actionGroup> + <actionGroup ref="AssertProductInStorefrontProductPage" stepKey="assertProductInStorefront2"> + <argument name="product" value="_defaultProduct"/> + </actionGroup> +</test> +``` + +## File to merge + +```xml +<test name="AdminCreateSimpleProductTest"> + <!-- This will be added after the step "fillProductFieldsInAdmin" in the above test. --> + <actionGroup ref="AddMyExtensionData" stepKey="extensionField" after="fillProductFieldsInAdmin"> + <argument name="extensionData" value="_myData"/> + </actionGroup> + + <!-- This will be added after the step "assertProductInStorefront2" in the above test. --> + <actionGroup ref="AssertMyExtensionDataExists" stepKey="assertExtensionInformation" after="assertProductInStorefront2"> + <argument name="extensionData" value="_myData"/> + </actionGroup> +</test> +``` + +## Resultant test + +```xml +<test name="AdminCreateSimpleProductTest"> + <annotations> + <features value="Catalog"/> + <stories value="Create a Simple Product via Admin"/> + <title value="Admin should be able to create a Simple Product"/> + <description value="Admin should be able to create a Simple Product"/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-23414"/> + <group value="product"/> + </annotations> + <before> + <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> + </before> + <after> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> + <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + </after> + + <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin1"/> + <actionGroup ref="FillAdminSimpleProductForm" stepKey="fillProductFieldsInAdmin"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="simpleProduct" value="_defaultProduct"/> + </actionGroup> + <!-- First merged action group --> + <actionGroup ref="AddMyExtensionData" stepKey="extensionField"> + <argument name="extensionData" value="_myData"/> + </actionGroup> + + <actionGroup ref="AssertProductInStorefrontCategoryPage" stepKey="assertProductInStorefront1"> + <argument name="category" value="$$createPreReqCategory$$"/> + <argument name="product" value="_defaultProduct"/> + </actionGroup> + <actionGroup ref="AssertProductInStorefrontProductPage" stepKey="assertProductInStorefront2"> + <argument name="product" value="_defaultProduct"/> + </actionGroup> + <!-- Second merged action group --> + <actionGroup ref="AssertMyExtensionDataExists" stepKey="assertExtensionInformation"> + <argument name="extensionData" value="_myData"/> + </actionGroup> +</test> +``` \ No newline at end of file