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.
收集数据的方法
我有两种使用相同数据提供程序的方法。数据提供者读取 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.
收集数据的方法