Forum Discussion

Mahesh9100's avatar
Mahesh9100
Occasional Contributor
4 years ago
Solved

How create a single test suite to support multiple environment with assertion

Hi all, I am new  to API automation with ReadyAPI. Great if anyone could advice me on below scenario with the industry best practices. 

I have a requirement to create an API regression test suite which will supports multiple environments(Dev, UAT, Pre-Prod etc).

My question is, is that possible to create a single test suite which can be executed in different environments with assertions according to the environment if not what is the best approach?

Ex: There is an API to retrieve person data. I want same to be executed in different environments and also assert the data based on the environment and also change the request data automatically when the environment is changed.

Thanks in advanced 🙂

 

  • richie 

    Provide payload as below

     

    resource=${#Project#RESOURCE}
    &client_id=${#Project#CLIENT_ID}
    &client_secret=${#Project#CLIENT_SECRET}
    &grant_type=client_crendentials

    You can define property file as show below, and create a file for each enrionment.

    dev.properties

    RESOURCE=<dev-resource>
    CLIENT_ID=<dev-client-id>
    CLIENT_SECRET=<dev-client-secret>

    And import the above file at project level, refer below documentation

    https://www.soapui.org/scripting-properties/working-with-properties.html

     

    So, you can similarly, use properties for END POINTS / other varying values per environment into property file and use them in the project as mentioned in the payload content.

     

    Now all you need is single project, common test cases. No separate test suites / test cases per environment any more, just use appropriate property file, import them into project before running the tests.

    If you are running the tests command line, even properties can be directly loaded runtime without even modifying the existing values in the project.

7 Replies

  • richie's avatar
    richie
    Community Hero
    Hey Mahesh9100,

    Yes this is totally feasible and in fact is the way i build all my readyapi projects now.

    The way i do this is that i create a ptoperties file that contains my environment specific static data, such as URLS, token values, username/password values and within this properties file i have placeholder property names (without the values populated) for all my dynamic data that is environment specific such as GUIDs etc.
    I create one of these properties files for each environment.

    Before execution i determine which environment is being tested and i then load in the properties file (which creates custom project level properties....as i already stated...the static data properties and values specific to the environment and empty/blank custom project level property placeholder names).

    Once the file is loaded in, i then have some disabled testsuites that execute queries against the environment to populate those dynamic data values (that are environment specific).

    Within my project i then create my normal functional testsuites (that are enabled) to exercise my tests, but the first testcase includes a single "Run Testcase/teststep" that executes the disabled testcase that generates the dynamic data (this wa the dynamic testdata never has the chance to expire). The remainder o my testcases are normal testcases except they alwaya reference the custom level project level properties for the all environment specific detail.

    The above works really well and do it or every single readyapi project i create now. Alas i cant take credit for this approach. It was nmrao who showed me how to do this and it works like a charm.

    Obviously this cant be the only way of doing this, but this approach works so well for me, ive never bothered using any other or even learning any other approach.

    Cheers

    Rich
    • Mahesh9100's avatar
      Mahesh9100
      Occasional Contributor

      richie Thanks for your detail explanation. 

      Could you please let me know how the assertions are implemented in your case?

      Thanks in advanced.

  • nmrao's avatar
    nmrao
    Icon for Champion Level 1 rankChampion Level 1
    There is feature exist called Environment where one can define different environments as you mentioned. One can choose environment during test execution.

    However, IMO, the test request and response and assertions would be the same.

    Would you please provide the use case with the details how it is different ?
    • Mahesh9100's avatar
      Mahesh9100
      Occasional Contributor

      Thanks Rao for the reply. 

      I have tried the Environment feature but what it does is change the your base URL and I couldn't find a way to change the test data and assertions based on the selected environment.

       

      Use case

      There is an API to retrieve person data. I wanted to run the same in Dev, UAT and pre-prod environments. But the databases are different(dev person id- 100 is different with UAT person id- 100(two different persons)). As a result of it , the name I wanted to assert in dev is different with the name in UAT.

      Therefore I just wanted to know whether it is feasible to do this with a single Test suite or I need multiple suites for each environment since the databases are different.