Как получать данные из CSV для тестов на TestNG

В TestNG Есть клевая приблуда для предоставления данных тестам под названием DataProvider. Но удобнее ведь хранить данные во внешних файлах. Например, в случае .csv файла новый тест кейс таким образом создается тупо добавлением новой строчки в .csv таблицу. Написанный ниже DataProvider запускает тест каждый раз, как находит новую строчку в .csv файле, пропуская первую строчку, т.к. мы принимаем её за заголовок.

@DataProvider(name = \"Data\")  
    public Iterator<Object []> dataReader() throws InterruptedException {  
        List<Object []> dataLines = new ArrayList<>();  
        boolean notDataHeader = false;  
        String[] data;  
        BufferedReader br;  
        String line;  
        String workingDirectory = System.getProperty(\"user.dir\");  
        String filePath = workingDirectory + \"\\\\TestNG\\\\data\\\\\" + dataFile;  
  
        try {  
            br = new BufferedReader(new FileReader(filePath));  
            while ((line = br.readLine()) != null) {  
                data = line.split(\";\");  
                if (notDataHeader) dataLines.add(data);  
                notDataHeader = true;  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return dataLines.iterator();  
    }

Как подсунуть DataProvider к тесту и так ясно:

@Test(description=\"Описание теста\", dataProvider = \"Data\")  
    public void pay(String uin, String price) throws Exception {  
       dotest();  
    }

Это .csv файл с двумя значениями, подходящий к данному примеру. Если нужно добавить значений, не забываем добавить столько же входных параметров для функции public void pay:

uin;price  
12;990

Как заставить TestNG и ANT разговаривать по русски

Вчера мучался с этим полдня, обгуглился до дрожи в пальцах, но так и не нашел решение. TestNG при запуске через IDEA и своих отчетах выдавал мне ??? вместо русских букв. Самый фак был ещё и в том, что в testng.xml присутствовали параметры на русском языке и ничего не работало. Докопался до того, что при запуске сборки Ant она сама запускает JVM со своими параметрами, такими как classpath и ea (enable assertions), но как туда впихнуть -Dfile.encoding=UTF-8 ?

Оказывается, в таргете внутри ant.xml нужно всего лишь указать следующее (см. строку 4):

<target name=\"test\" depends=\"compile\">  
    <testng outputdir=\"${testdir}\" classpathref=\"all.classpath\" haltOnFailure=\"true\">  
        <xmlfileset dir=\"${basedir}\" includes=\"testng.xml\"/>  
        <jvmarg value=\"-Dfile.encoding=UTF-8\" />  
    </testng>  
</target>

 

Как в TestNG передавать переменные между файлами классов

Легко. Если у вас тестСьюты лежат не только в разных классах, но также и в разных .java файлах, нужные переменные можно передавать, записывая их в ITestContext в одном классе, а потом читая их оттудаже в другом классе. ITestContext это данные, которые могут перезаписывать или использовать любые тест методы в TestNG.

Записываем данные:

@Test(description=\"Найти код\")  
public void check(ITestContext context) {  
    data = SomeClass.doSomething(driver, data, config);  
    context.setAttribute(\"myVariable\", data);  
}

Читаем их в другом классе:

@Test(description=\"test2\")  
public void test2(ITestContext context) {  
    String data = (String) context.getAttribute(\"myVariable\");  
}