Request Quote

Magento 2 Functional Testing Framework (MFTF) Merging

Merging is the most beneficial feature of MFTF. It helps to avoid code duplicacy. Magento already provides it’s prewritten test cases for its basic functionalities. I’ll explain Merging here with an example of the Customer Signup form. Magento already provides its test cases for the customer signup form but let’s say I have installed a custom module and some new form attributes added on this page.

Now, we don’t need to write the complete test case of this particular page. Here we can use merging. For merging, we need to create a new file inside the custom module’s Test folder and add all details related to the newly added fields only.

Magento Customer Signup Form-

Magento customer signup form after module installation-

Let’s see the technical implementation-

Navigate to MagentoRoot/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Test here you’ll see a file  StorefrontCreateCustomerTest.xml. This is the test written by Magento for the customer signup form from the frontend.

<?xml version="1.0" encoding="UTF-8"?>
<!--
 /**
  * Copyright © Magento, Inc. All rights reserved.
  * See COPYING.txt for license details.
  */
-->

<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd">
    <test name="StorefrontCreateCustomerTest">
        <annotations>
            <features value="Customer Creation"/>
            <stories value="Create a Customer via the Storefront"/>
            <title value="You should be able to create a customer via the storefront"/>
            <description value="You should be able to create a customer via the storefront."/>
            <severity value="CRITICAL"/>
            <testCaseId value="MAGETWO-23546"/>
            <group value="customer"/>
            <group value="create"/>          
        </annotations>
        <!-- <after>
            <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/>
        </after> -->

        <amOnPage stepKey="amOnStorefrontPage"  url="/"/>
        <click stepKey="clickOnCreateAccountLink" selector="{{StorefrontPanelHeaderSection.createAnAccountLink}}"/>
        <fillField  stepKey="fillFirstName" userInput="{{CustomerEntityOne.firstname}}" selector="{{StorefrontCustomerCreateFormSection.firstnameField}}"/>
        <fillField  stepKey="fillLastName" userInput="{{CustomerEntityOne.lastname}}" selector="{{StorefrontCustomerCreateFormSection.lastnameField}}"/>
        <fillField  stepKey="fillEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerCreateFormSection.emailField}}"/>
        <fillField  stepKey="fillPassword" userInput="{{CustomerEntityOne.password}}" selector="{{StorefrontCustomerCreateFormSection.passwordField}}"/>
        <fillField  stepKey="fillConfirmPassword" userInput="{{CustomerEntityOne.password}}" selector="{{StorefrontCustomerCreateFormSection.confirmPasswordField}}"/>
        <click stepKey="clickCreateAccountButton" selector="{{StorefrontCustomerCreateFormSection.createAccountButton}}"/>
        <see stepKey="seeThankYouMessage" userInput="Thank you for registering with Main Website Store."/>
        <see stepKey="seeFirstName" userInput="{{CustomerEntityOne.firstname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" />
        <see stepKey="seeLastName" userInput="{{CustomerEntityOne.lastname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" />
        <see stepKey="seeEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" />
    </test>
</tests>

Now I’ll create a new folder of my custom module inside MagentoRoot/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MyModuleName/ and inside this folder, I’ll create a Test folder and inside this Test folder, I’ll create a file with the same name used by Magento which is StorefrontCreateCustomerTest.xml and will write the steps for newly added fields.

<?xml version="1.0" encoding="UTF-8"?>
<!--
 /**
 * Webkul Software.
 * @category  Webkul
 * @author    Webkul
 * @copyright Copyright (c) Webkul Software Private Limited (https://webkul.com)
 * @license   https://store.webkul.com/license.html
 */
-->

<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd">
    <test name="StorefrontCreateCustomerTest">
        <annotations>
            <features value="Seller Creation"/>
            <stories value="Create a Seller via the Storefront"/>
            <title value="You should be able to create a seller via the storefront"/>
            <description value="You should be able to create a seller via the storefront."/>
            <severity value="CRITICAL"/>
            <testCaseId value="WEBKULMP-00001"/>
            <group value="sellercreate"/>
        </annotations>
        <click stepKey="clickBecomeSellerRadioButton" selector="{{StorefrontCustomerCreateFormSection.becomeSellerRadioButton}}" before="fillEmail"/>
        <waitForAjaxLoad time="5" stepKey="waitForAjaxResponse" before="clickBecomSellerRadioButton"/>
        <fillField stepKey="shopUrl" userInput="{{SellerEntityOne.shopurl}}" selector="{{StorefrontCustomerCreateFormSection.shopUrlField}}" after="fillPassword"/>
        <remove keyForRemoval="seeFirstName"/>
        <remove keyForRemoval="seeLastName"/>
        <remove keyForRemoval="seeEmail"/>
    </test>
</tests>

As you can see in my custom module file StorefrontCreateCustomerTest.xml I have not written the steps already written in Magento file. I have written the steps for my newly added fields only.

Now the steps of test cases will work like – Fill the First Name, Last Name, Email, Yes(Radio Button), Shop URL (Text Field) and then Password and Confirm Password and then it will click on the submit button.

before=”fillEmail” will make sure that after filling details in email field it will select the radio button. fillEmail is a stepKey of the step of filling the data in email field written in Magento’s  customer creation test file StorefrontCreateCustomerTest.xml 

after=”fillPassword” will make sure that after filling the data in ShoP Url field only it will fill the data in the password field.fillPassword is a stepKey of the step of filling the data in password field written in Magento’s  customer creation test file StorefrontCreateCustomerTest.xml 

<remove keyForRemoval=”seeFirstName”/> I have used it to remove this step because after my custom module installation it will be redirected to a new page where it will not get the email of customer. After registration Magento by default redirects on the customer dashboard page. Where we get the customer email, first name, last name.

Customer dashboard after registration –

Seller dashboard after registration –

 

For userInput and selector also I have created the files.

Now merge both the files by running this command – vendor/bin/robo generate:tests

It will generate StorefrontCreateCustomerTestCest.php inside _generated folder of the test file of your XML test file.

That’s all about merging. If you have any doubt then please drop your comment below.

Thanks! 🙂

 

. . .

Comments (2)

Add Your Comment

  • Jesni
    I am using framework in my product detail page. I used

    But it gives me error i.e no such frame. Can you please help me?

    • Shruti Baranwal
      Hi,

      Please tell me the Magento and MFTF versions you are using. Also, send me the screenshot URL of the error you are getting. It will be easy for me to recognize the correct issue.

      Thanks!

  • css.php
    Hire Us!
    Brief us about your requirements and we'll get back to you.
    Woo! Hooy!
    We have just recieved your project brief and our expert will contact you shortly.
    Send Again
    Close