簡體   English   中英

TestNG-為所有測試傳遞帶有輸入數據的CSV文件

[英]TestNG - Passing a CSV file with input data for all tests

我在單元測試中使用TestNG框架。 使用DataProvider批注,我能夠成功地將輸入數據從CSV文件傳遞到測試方法。

問題是我的測試類中有幾種測試方法,每種方法都需要不同的數據集作為測試的輸入。 所有輸入都存在於單個csv文件中。 我知道我可以通過在類級別使用DataProvider注釋來指定單個輸入文件。 但是,是否可以通過僅使用輸入CSV文件中的特定數據來運行測試文件中的每個測試用例的方法?

為了更清楚一點,我的測試類(例如TestDemo)將具有3種測試方法(例如test1,test2,test3)。 有一個CSV文件,其中包含所有3種方法的測試數據。 無論如何,我可以將其指定為輸入文件,但僅使用用於該測試的數據運行每個測試嗎?

提前致謝。

我使用Apache Metamodel讀取@DataProvider方法中的.CSV文件並返回二維數組。 很簡單

在這里寫了一個使用TestNG 的示例 具體來說, 這個類

請記住,如果將電子表格行中的所有項目都放入Object [],則可以將其作為單個對象直接傳遞給測試方法,而且@BeforeMethod能夠在實際測試之前訪問該行數據甚至開始。 這是JUnit 4.x無法做到的。

TestNG不支持此功能,但是您應該能夠輕松地對其進行調整。 例如:

public class TestDemo {
    private static Object[][] data() {
        /* Your original data provider code that returns test data for each test method.
         * You may wish to cache the result using memoization to avoid reading the CSV file
         * multiple times. */
    }

    @DataProvider(indices = 0)
    public static Object[][] data1() {
        return data();
    }

    @Test(dataProvider = "data1")
    public void test1(/* test 1 data parameters */) {
        /* test 1 code */
    }

    @DataProvider(indices = 1)
    public static Object[][] data2() {
        return data();
    }

    @Test(dataProvider = "data2")
    public void test2(/* test 2 data parameters */) {
        /* test 2 code */
    }

    @DataProvider(indices = 2)
    public static Object[][] data3() {
        return data();
    }

    @Test(dataProvider = "data3")
    public void test3(/* test 3 data parameters */) {
        /* test 3 code */
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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