Поставщик данных смешивает значения для параллельных методов - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть два метода, которые используют один и тот же поставщик данных. Поставщик данных читает файл 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 -->

1 Ответ

0 голосов
/ 18 апреля 2019

попробуй с синхронизированным как

public synchronized Object[][]

Обновлено: добавлен метод синхронизации, который собирает данные из листа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...