[英]How can I structure multiple 2D arrays of test data into a properties file and read them for my tests?
我需要將所有測試數據保存到properties
文件或JSON
文件中(因為它們比XML
更容易閱讀)。 我正在考慮使用單個屬性文件來存儲整個項目的數據。 不確定這是否可行。
我正在使用帶有@DataProvider
注釋的TestNG
測試框架來標記將返回二維數組的函數。 這是一個示例:
/*
* This returns 2 parameters for each test execution
*/
@DataProvider(name = "info on cars")
public Object[][] testDataOnCars(){
return new Object[][]{
{"Mercedes as key", "Value with any special char ~!@#$%^&*()_'\",./<>?+"}, {"Jaguar", "<>?,./;':\"[]\{}|~!@#$%^&*()_+`"}
}
}
對此的相應測試可能如下所示:
@Test(dataprovider = "info on cars")
public void testAllCars(String carName, String carDetails){
// Do something with carName and carDetails
}
對於不同的數據集,某些測試可能需要不同數量的參數。 例如:
/*
* This returns 4 parameters for each test execution
*/
@DataProvider(name = "info on bank statements")
public Object[][] testDataOnBankStatements(){
return new Object[][]{
{"Credit card payment", "200", "debit", "5th May, 2022"},
{"Salary credit", "5200", "credit", "5th May, 2022"},
}
}
這可能會被具有 4 個參數的測試函數消耗:
@Test(dataprovider = "info on bank statements")
public void testAllCars(String description, Integer amount, String debitOrCredit, String date){
// Do something with the 4 params
}
有人知道嗎:
Object[][]
的二維數組傳遞?假設您有src/test/resources/test_data.json
文件,它看起來像
{
"infoOnCars": [
["Mercedes as key", "Value with any special char ~!@#$%^&*()_'\\\",./<>?+"],
["Jaguar", "<>?,./;':\\\"[]\\{}|~!@#$%^&*()_+`"]
],
"infoOnBankStatements": [
["Credit card payment", "200", "debit", "5th May, 2022"],
["Salary credit", "5200", "credit", "5th May, 2022"]
]
}
然后,您可以將org.json
依賴項添加到您的項目並實現以下內容:
public class DataProviderTest {
private JSONObject jsonObject;
private JSONObject getJsonObject() throws URISyntaxException, IOException {
if(jsonObject == null){
jsonObject = new JSONObject(
Files.readString(Paths.get(DataProviderTest.class.getClassLoader().getResource("test_data.json").toURI()))
);
}
return jsonObject;
}
@DataProvider(name = "cars")
Iterator<Object[]> getCars() throws URISyntaxException, IOException {
return getIterator(getJsonObject(), "infoOnCars");
}
@DataProvider(name = "banks")
Iterator<Object[]> getBanks() throws URISyntaxException, IOException {
return getIterator(getJsonObject(), "infoOnBankStatements");
}
Iterator<Object[]> getIterator(JSONObject jsonObject, String key){
Map<String, Object> map = jsonObject.toMap();
Object val = map.get(key);
if(val instanceof ArrayList){
Iterator<ArrayList> valArray = ((ArrayList) val).iterator();
return new Iterator<>() {
@Override
public boolean hasNext() {
return valArray.hasNext();
}
@Override
public Object[] next() {
return valArray.next().toArray();
}
};
}
return null;
}
@Test(dataProvider = "cars")
public void test1(String carName, String carDetails){
System.out.println(">>>> Cars test started");
System.out.println("Car name: " + carName);
System.out.println("Car details: " + carDetails);
}
@Test(dataProvider = "banks")
public void test2(String description, String amount, String debitOrCredit, String date){
System.out.println(">>>> Bank test started");
System.out.println("Description: " + description);
System.out.println("Amount: " + amount);
System.out.println("Debit / Credit: " + debitOrCredit);
System.out.println("Date: " + date);
}
}
它將所有數據解析為字符串。 因此,您需要進行一些轉換才能將數字用作數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.