Search code examples
javascriptapipostmanpostman-testcase

Postman test extract integer variable from object of arrays


I am trying to create postman tests for an API.

The response I am getting from post man is in a json form. It looks like an Object of arrays.

{
"389": [
    [
        "2021-04-30T00:00:00Z",
        16.130089309443093
    ]
],
"390": [
    [
        "2021-04-30T00:00:00Z",
        14.899161948201808
    ]
],
"391": [
    [
        "2021-04-30T00:00:00Z",
        17.495245579925736
    ]
],
"392": [
    [
        "2021-04-30T00:00:00Z",
        16.78176061001777
    ]
],
"393": [
    [
        "2021-04-30T00:00:00Z",
        25.473437964096448
    ]
],
"394": [
    [
        "2021-04-30T00:00:00Z",
        56.746358310562826
    ]
],
"388": [
    [
        "2021-04-30T00:00:00Z",
        18.49559245290604
    ]
]
}

I am trying to test the integer value that comes after the date is greater than 0 but cant seem to figure out how to traverse the structure in javascript.

With normal response Jsons they usually have the ID beside them and you can use that value, but not with this response

This is the test so far

pm.test("Check performance > 0", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.greaterThan(0);
});

Solution

  • It seems you are testing the whole JSON to be > 0. You should loop throught the values :

    pm.test("Check performance > 0", function () {
        var jsonData = pm.response.json();
    
        Object.values(jsonData).forEach(record => {
            pm.expect(record[0][1]).to.greaterThan(0);
        });
    
       /* record will be equal to
        [
            [
                "2021-04-30T00:00:00Z",
                16.130089309443093
            ]
        ]
        and then
        [
            [
                "2021-04-30T00:00:00Z",
                14.899161948201808
            ]
        ]
        and so on */
    });
    
    

    Object.values retrieves the values of a dictionary. See Object.values
    (if we want the keys ["389", "390", ...] we can use Object.keys)