Dynamically generate tests in Cypress to test your APIs
When you are using Cypress to test your APIs, you might face a scenario where you have a config or properties file and you want to use it to write your tests. But you don’t have to write a test for each and every item in the config file. Cypress lets your iterate over your config file and dynamically create tests at run-time.
Let’s assume we have a config file like this in JSON format.
{ "api1": { "kpi": "api1", "url": "https://localhost/api/1" }, "api2": { "kpi": "api2", "url": "https://localhost/api/2" }, "api3": { "kpi": "api3", "url": "https://localhost/api/3" }, "api4": { "kpi": "api4", "url": "https://localhost/api/4" }, "api5": { "kpi": "api5", "url": "http://localhost/api/5" } }
I’m going to create tests for each of the entries here.
Object.keys(input).forEach((key) => { it("Testing - " + key, function () { cy.fixture('responses.json').then((responses) => { console.log("RES --- " + JSON.stringify(responses)); cy.log(key) cy.log(input[key]) let api = input[key]; cy.request ({ method: 'GET', url: api.url, headers: { 'authorization': 'Bearer ' + token } }).then((response) => { cy.log(response.body); expect(JSON.stringify(response.body.payload.data)).equal(JSON.stringify(responses[key].data)); }) }) }) })
In your Cypress console, you can see the tests running for each entry in config JSON.
Testing api1 Testing api2 Testing api3 Testing api4 Testing api5