2017-07-17 5 views
1

Ich möchte Daten in meinem DataProvider mit JSON-Datei bereitstellen. Bitte schlagen Sie den besten Ansatz dazu vor (in Java).Lesen von Daten aus der JSON-Datei für Datenprovider in Test

z. JSON-Datei

{ 
    "dataSet": [ 
    { 
     "testCase": "Verify error message on wrong userName", 
     "username": "test", 
     "password": "password", 
     "rememberMe": false 
    }, 
    { 
     "testCase": "Verify error message on empty userName", 
     "username": "", 
     "password": "password", 
     "rememberMe": false 
    } 
    ] 
} 

und Datenprovider sollte idealerweise aussehen wie

@DataProvider(name = "dpForIncorrectUsernameOrPassword") 
public static Object[][] incorrectUsernameOrPassword() { 
    Object[][] testObjArray = JsonUtils.getJsonObjects("test.json"); 
    return testObjArray; 
} 

so dass

{ 
    "testCase": "Verify error message on wrong userName", 
    "username": "test", 
    "password": "password", 
    "rememberMe": false 
} 

diese einen Datensatz handelt, und

{ 
    "testCase": "Verify error message on empty userName", 
    "username": "", 
    "password": "password", 
    "rememberMe": false 
} 

andere wirkt, und so weiter ..

+0

Was ist die Frage? – juherr

Antwort

1

Hier ist, wie Sie es tun.

Die POJO-Klasse, die jeden Datensatz aus dem JSON-Datei repräsentiert wie folgt aussehen würde:

public class TestData { 
    private String testCase; 
    private String username; 
    private String password; 
    private boolean rememberMe; 

    public String getTestCase() { 
     return testCase; 
    } 

    public void setTestCase(String testCase) { 
     this.testCase = testCase; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public boolean isRememberMe() { 
     return rememberMe; 
    } 

    public void setRememberMe(boolean rememberMe) { 
     this.rememberMe = rememberMe; 
    } 

    @Override 
    public String toString() { 
     return "TestData{" + 
       "testCase='" + testCase + '\'' + 
       ", username='" + username + '\'' + 
       ", password='" + password + '\'' + 
       ", rememberMe=" + rememberMe + 
       '}'; 
    } 
} 

Hier ist, wie Sie Ihre Testklasse aussehen würde:

import com.google.gson.Gson; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonParser; 
import com.google.gson.reflect.TypeToken; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.List; 

public class SampleTestClass { 

    @Test(dataProvider = "getData") 
    public void testMethod(TestData data) { 
     System.out.println(data); 
    } 

    @DataProvider 
    public Object[][] getData() throws FileNotFoundException { 
     JsonElement jsonData = new JsonParser().parse(new FileReader("src/test/resources/45146523.json")); 
     JsonElement dataSet = jsonData.getAsJsonObject().get("dataSet"); 
     List<TestData> testData = new Gson().fromJson(dataSet, new TypeToken<List<TestData>>() { 
     }.getType()); 
     Object[][] returnValue = new Object[testData.size()][1]; 
     int index = 0; 
     for (Object[] each : returnValue) { 
      each[0] = testData.get(index++); 
     } 
     return returnValue; 
    } 
} 

PS Here I mache ich Gebrauch von Google Gson Bibliothek

+0

Danke krishnan. war hilfreich. – iamvroon