簡體   English   中英

如何將多個 2D 測試數據數組構建到屬性文件中並為我的測試讀取它們?

[英]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

}

有人知道嗎:

  1. 如何將測試數據組織到文件中? 擁有屬性文件或 JSON 文件或其他類型的文件會更好嗎? 它是一個二維數組,許多參數綁定在一起。
  2. 是否建議將不同的測試數據存儲到同一個屬性文件中? 或者我應該為每種測試數據創建一個單獨的文件(比如 1 個用於銀行資料的文件 - 5 個參數,另一個用於旅行的文件 - 3 個參數等)。
  3. 如何從文件中讀取這種結構化數據並將它們作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM