Test random URLs from spreadsheet using alasql

92 views Asked by At

I have a large number of URLs within a xlsx file. What I'd like to do is randomly select some of these URLs, load them, then check that they return a status code of 200.

So I'm using the npm alasql package to do this.

At the moment, the following code successfully loads the first 5 URLs in the spreadsheet, checks that they 200, then finishes the test.

var alasql = require('alasql');
var axios = require('axios');

module.exports = {
    '@tags': ['smokeTest'],
    'Site map XML pages load': async (browser) => {
        const result = await alasql.promise('select URL from xlsx("./testUrls.xlsx",{sheetid:"RandomUrls"})');
        var xcelData = result.map(item => {
            return item.URL;
        });
        async function siteMapUrlsTestArr(item) {
            var response = await axios.get(browser.launch_url + item);
            browser.verify.equal(response.status, 200);
            console.log('Sitemap test URL =', (browser.launch_url + item));
        }
        for (let index = 0; index < xcelData.length; index++) {
            if (index < 5) {
                const xmlTestUrl = xcelData[index];
                await siteMapUrlsTestArr(xmlTestUrl);
            } else {}
        }
    },
    'Closing the browser': function (browser)  {
        browser.browserEnd();
    },
};

However, what I'd like to do is randomly select 5 URLs from the (large) list of URLs in the spreadsheet, rather than the first 5 URLs.

I appreciate that this will (probably) include using the Math.floor(Math.random() command, but I can't seem to get it to work no matter where I place this command.

Any help would be greatly appreciated. Thanks.

1

There are 1 answers

3
Lalit Fauzdar On

Your logic is flawed. Here's how.

You want to select 5 random URLs from a list and then, perform the operation on the items but what you're doing is you're getting all the items and running the operation using a loop on first five.

To correct it:

//Fixed to five as you only want to test 5 URLs.
for (let index = 0; index < 5; index++) {
    //Selecting a Random item from the list using Math.random();
    const xmlTestUrl = xcelData[Math.floor(Math.random() * xcelData.length)];
    //Performing the HTTP response operation on it.
    await siteMapUrlsTestArr(xmlTestUrl);
}

The aforementioned solution will select a random item in each loop and perform the HTTP response operation on it. The items will be randomly selected using Math.random().