Итерирование через JDBC ResultSet для DataProvider? - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь сделать некоторые управляемые данными тесты, используя данные базы данных, а затем используя TestNG @DataProvider. Я создал таблицу ниже в MySQL, которая имеет следующие столбцы и значения. Я пытаюсь использовать браузер, а затем имя пользователя и пароль в каждой строке для входа на веб-сайт, всего 3 теста.

    scenario, username, password
chrome johnsmith password1
firefox janesmith password2
edge username3 password3

У меня есть код ниже, чтобы перебрать ResultSet:

    @DataProvider
public Object[][] getData() throws SQLException {

    String host = "localhost";
    String port = "3306";
    Connection con = DriverManager.getConnection(
            "jdbc:mysql://" + host + ":" + port + "/qadbdemo2" + "?useSSL=false", "root", "password");
    Statement s = con.createStatement();
    ResultSet rs = s.executeQuery("select * from credentials;");
    int colCount = rs.getMetaData().getColumnCount();
    rs.last();
    int rowCount = rs.getRow();
    rs.beforeFirst();
    rs.next();
    Object data[][] = new Object[rowCount][colCount];

    for (int rNum = 1; rNum <= rowCount; rNum++) {
        for (int cNum = 0; cNum < colCount; cNum++) {
            System.out.print(rs.getObject(rNum) + " ");
            data[rNum - 1][cNum] = rs.getObject(rNum);
        }
        System.out.println();
    }
    return data;

}

Однако, похоже, что возникают проблемы при попытке зацикливания. Тесты запускаются, но он использует только каждый столбец первой строки в качестве переменных для каждого запуска браузера. Должен ли я использовать rs.next () где-то здесь вместо того, чтобы перебирать строки? Что еще не так с моей логикой здесь? Вывод / результаты видны ниже:

    [RemoteTestNG] detected TestNG version 6.14.2
chrome chrome chrome 
johnsmith johnsmith johnsmith 
password1 password1 password1 
Starting ChromeDriver 2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91) on port 26256
Only local connections are allowed.
May 03, 2018 1:17:45 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
PASSED: doLogin("chrome", "chrome", "chrome")
FAILED: doLogin("johnsmith", "johnsmith", "johnsmith")
FAILED: doLogin("password1", "password1", "password1")

1 Ответ

0 голосов
/ 03 мая 2018

Я смог добиться этого с помощью этого кода:

    Object[][] data = new Object[rowCount][colCount];
    int row = 0;
    while (rs.next()) {
        for (int i = 0; i < colCount; i++) {
            data[row][i] = rs.getObject(i+1);
        }
        row++;
    }
    return data;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...