Dataprovider 混合并行方法的值

Dataprovider Mixing Up Values for Parallel Methods

我有两种使用相同数据提供程序的方法。数据提供者读取 excel 文件来构建要传递给方法的对象。但是,当运行并行使用这两种方法时,数据提供者仅为两种方法传回一个变量。

我试图更改数据提供程序变量名和对象名,但这没有用。我确认 excel util 函数正在运行。每个 if 语句在数据提供者方法中都被正确调用,但它 returns 是错误的变量。我如何确保数据提供程序按顺序执行,现在混淆了变量?

这是我的 Java class 和 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 sheet 的描述:

Sheet "method1" 具有价值 "method1 var"
Sheet "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 文件中的 class 标记时,运行 测试与 classes 并行,它的工作方式如下预期:

<?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 -->

尝试使用同步

public synchronized Object[][]

已更新:将同步添加到从 sheet.

收集数据的方法