在我的报告中,excel表中的最后一个测试名称将附加到我的结果中。这是我的代码
public class Test_suite implements ITest {
private String testInstanceName="";
public String getTestName()
{
return testInstanceName;
}
private void setTestName(String anInstanceName)
{
this.testInstanceName = anInstanceName;
}
@DataProvider()
public Object[][] Unit() throws Exception
{
Object[][] testObjArray = Excel.getTableArray("./Test Data/Test.xlsx","Unit");
return (testObjArray);
}
@BeforeMethod(alwaysRun=true)
public void before(Method method,Object[] parameters)
{
String testCaseId="";
testCaseId = parameters[0].toString();
System.out.println(testCaseId);
setTestName(testCaseId);
}
@Test(dataProvider="Unit")
public void Test(){
}
我的报告看起来像这样
答案 0 :(得分:0)
这是因为所有使用dataProvider的测试都将并行执行。使用的默认线程数是10.正如您所看到的,这些方法使用相同的类,在您的情况下 Test_suite.java
insance变量 testInstanceName 是可变的,并被每个dataprovider线程覆盖,最新用于设置为测试名称。您可以通过在before方法中包含设置的测试名称逻辑而不使用实例变量来实现您打算做的事情
答案 1 :(得分:0)
package API_Testing;
import java.lang.reflect.Method;
import org.testng.ITest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import resources.Excel;
import resources.Utils;
public class Carto implements ITest{
private String testInstanceName="";
public String getTestName()
{
return testInstanceName;
}
@DataProvider
public Object[][] Data() throws Exception
{
Object[][] testObjArray = Excel.getTableArray("./Test_Cases/Test_Cases.xlsx","Carto");
return (testObjArray);
}
@BeforeMethod(alwaysRun=true)
public void before(Method method,Object[] parameters)
{
String testCaseId="";
testCaseId = parameters[0].toString();
this.testInstanceName=testCaseId;
}
@Test(dataProvider="Data")
public void Test(String TCname,String Type,String API,String Input,String Input_Path,String Validator,String Output,String Output_value )throws Exception
{
Utils util=new Utils();
Output_value=Output_value.substring(1,Output_value.length()-1);
util.Test_body(Type, API, Input, Input_Path, Validator, Output, Output_value);
}
}
现在我的代码是这样的,输出与我之前上传的相同。没有变化