У меня есть два метода, которые используют один и тот же поставщик данных. Поставщик данных читает файл Excel, чтобы построить объект для передачи в методы. Однако при параллельном запуске двух методов поставщик данных передает только одну переменную для обоих методов.
Я попытался изменить имена переменных поставщика данных и имен объектов, но это не сработало. Я подтвердил, что функция excel util работает. Каждый оператор if вызывается правильно в методе поставщика данных, но возвращает неправильную переменную. Как я могу гарантировать, что поставщик данных выполняется последовательно, чтобы теперь смешивать переменные?
Вот мой класс Java с testNG
public class dataprovidertest extends DriverMethods {
@Test (groups = {"test"}, dataProvider = "datadriven")
public void method1(String var1) throws Exception {
System.out.println("method 1 variable: " + var1);
}
@Test (groups = {"test"}, dataProvider = "datadriven")
public void method2(String var2) throws Exception {
System.out.println("method 2 variable: " + var2);
}
@DataProvider (name = "datadriven")
public Object[][] provideData(Method m) throws Exception{
if(m.getName().equalsIgnoreCase("method1")) {
String sTestCaseName1 = m.getName();
Object[][] testObjArray1 = ExcelUtils.getTableArray("C:\\Users\\user\\dataprovidertest_TestData.xlsx", sTestCaseName1);
return (testObjArray1);
}
if(m.getName().equalsIgnoreCase("method2")) {
String sTestCaseName2 = m.getName();
Object[][] testObjArray2 = ExcelUtils.getTableArray("C:\\Users\\user\\dataprovidertest_TestData.xlsx", sTestCaseName2);
return (testObjArray2);
}
return null;
}
Вот мой xml файл
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods" >
<test thread-count="6" name="Test" parallel = "methods">
<classes>
<class name="cpq.dataprovidertest">
<methods>
<include name ="method1"/>
<include name ="method2"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
Вот описание моего листа Excel:
Лист "method1" имеет значение "method1 var"
Лист «method2» имеет значение «method2 var»
В настоящее время вывод:
[testng] method 2 variable: method2 var
[testng] method 1 variable: method2 var
или
[testng] method 2 variable: method1 var
[testng] method 1 variable: method1 var
Как я могу изменить это так:
[testng] method 2 variable: method2 var
[testng] method 1 variable: method1 var
Спасибо!
я заметил, что когда я разделяю два метода на теги классов в файле xml и запускаю тесты параллельно по классам, он работает как ожидалось:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" data-provider-thread-count="2">
<test thread-count="6" name="Test" parallel = "classes">
<classes>
<class name="cpq.dataprovidertest">
<methods>
<include name ="method1"/>
</methods>
</class>
<class name="cpq.dataprovidertest">
<methods>
<include name ="method2"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->