Search code examples
jsonselenium-webdriverappiumtestng-dataproviderdata-driven-tests

Reading test data from JSON with TestNG in Java


I'm trying to find the easiest way to parse simple json to java Object for use json data in autotest (TestNG), but I don't understand another examples with various libraries.

I have this code:

@Test(dataProvider = "SearchData") 
public void searchCatTest(String searchRequest, int expectedVal) {
    CatScreen.search(searchrequest);
    int actualVal = CatScreen.getSearchResultsNumber();
    Assert.assertEquals(actualVal, expectedVal);
}

And I have this json:

{   "dataSet": [
    {
      "searchRequest": "*]",
      "expectedVal": 0
    },
    {
      "searchRequest": "Tom",
      "expectedVal": 1
    },
    {
      "searchRequest": "1234",
      "expectedVal": 0
    }   ] }

How can I linked them?


Solution

  • @DataProvider(name = "json-data")
    public static Object[][] getJSON(ITestContext context) throws FileNotFoundException {
        String filename = <get name from context>
        JsonArray array = new JsonParser().parse(new FileReader(filename))
           .getAsJsonArray();
        Gson gson = new Gson();
        List < Map > list = gson.fromJson(array, List.class);
        Object[][] objects = list.stream()
            .map(testData - >
                testData.values().stream().map(obj - > 
                  doubletoint(obj)).toArray()).toArray(Object[][]::new);
        return objects;
    }
    

    TestNG will create a new thread per row of data.