Как передать n параметров в виде одного параметра с помощью TestNG DataProviders - PullRequest
0 голосов
/ 07 марта 2019

Я читаю данные из Excel и передаю данные в тест с использованием провайдеров данных. У меня есть 5 параметров, но метод теста выглядит комковато. Итак, я хочу передать один параметр вместо многих. Я пытался сделать это, но тест не удался с ошибкой ниже:

java.lang.ClassCastException: com.utils.ExcelUtil$TestData cannot be cast to [Ljava.lang.Object;
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1225)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
    at org.testng.TestNG.run(TestNG.java:1031)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

Пожалуйста, найдите мой код ниже:

Test.java

@DataProvider
    public Iterator<TestData> getData() throws IOException {
        List<TestData> data = excelUtil().getDataFromExcel();
        return data.iterator();
    }



    @Test(dataProvider = "getData")
        public void verify(TestData testData) {
        System.out.println("Value of t1 : " + testData.t1);
}

ExcelUtil.java

public ExcelUtil(String path) throws IOException {
        stream = new FileInputStream(path);
        workbook = WorkbookFactory.create(stream);
        workSheet = workbook.getSheetAt(0);
    }
public List<TestData> getDataFromExcel() {

        DataFormatter dataFormatter = new DataFormatter();
        List<TestData> data = new ArrayList<TestData>();

        Iterator<Row> rowIterator = workSheet.iterator();
        TestData testResourceData = new TestData();
        while (rowIterator.hasNext()) {

            Row row = rowIterator.next();
            if (row.getRowNum() == 0) {
                continue;
            }
            resourceData.t1 = row.getCell(0).getStringCellValue();
            resourceData.t2 = row.getCell(1).getStringCellValue();
            Double value = Double.parseDouble(dataFormatter.formatCellValue(row.getCell(2)));
            Long longValue = value.longValue();
            resourceData.t3 = String.valueOf(longValue.toString());
            resourceData.t4 = row.getCell(3).getStringCellValue();
            resourceData.t5 = row.getCell(4).getStringCellValue();
            data.add(resourceData);

        }
        return data;
    }

    public class TestData {

        public String t1;
        public String t2;
        public String t3;
        public String t4;
        public String t5;
}

Пожалуйста, предложите лучший способ передачи данных в виде одного аргумента. Спасибо ..

1 Ответ

0 голосов
/ 12 марта 2019

Я бы предложил попробовать QAF - расширение поставщика данных TestNG . Он поддерживает не только динамические аргументы, но и автоматическое преобразование аргумента сложного объекта при чтении данных из любого внешнего источника данных. Например:

@QAFDataProvider (dataFile = "resources/data/logintestdata.xls")
@Test(description = "login functionality test")
public void login(String userName, String pwd) {
   //implementation goes here
}
@QAFDataProvider (dataFile = "resources/data/logintestdata.xls")
@Test(description = "login functionality test")
public void login(LoginBean user) {
   //implementation goes here
}

@QAFDataProvider (dataFile = "resources/data/mytestdata.xls")
@Test(description = "login functionality test")
public void myTest(LoginBean user, Item item) {
   //implementation goes here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...