虽然在使用相同数据提供程序的两个不同类中有两个测试用例,但在执行第二个用例时,超级类中的所有值都会重置为null



目前,我有3个类

  • 测试库->它负责配置运行套件中所需的所有全局变量(例如:webdriver-config(
  • 2个测试用例,每个测试用例在一个单独的类中扩展了测试库
  • 问题是通过运行TestNG.xml,testbase中的所有全局变量在执行第二个TestCase->第二个测试用例开始调用其数据提供程序的确切时间

以下是实现和输出的示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="5" name="Test">
<classes>
<class
name="Visual_Automation_Team.Visual_Automation_DevOps.ValidateLinks">
<methods>
<include name="CheckURLValidity" />
</methods>
</class>
<class
name="Visual_Automation_Team.Visual_Automation_DevOps.ConsoleCheck">
<methods>
<include name="CheckConsoleErrors" />
</methods>
</class>            
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

TestBase.Class->用于测试套件配置

public class TestBase 
{
//Those variables get reset to null with the second call of the data provider
WebDriver driver;
ConfigurationsController configurationController;
ResolutionsInfo resolutionInfo;
SetupEnvironment setupEnvironment;
String automatedBrowser;
ValidWebpagesContainer validPagesContainer;
ExcludedWebpagesContainer excludedPagesContainer;
IncludedWebpagesContainer includedPagesContainer;
Webpage basePage;

@BeforeTest
public void Initialize()
{
System.out.println("Inside Initialize");
configurationController = new ConfigurationsController();
excludedPagesContainer = new ExcludedWebpagesContainer();
includedPagesContainer = new IncludedWebpagesContainer(); .....
}
//Data provider that get called before executing each testcase we have
@DataProvider(name="validLinksDP")
public Object[] ValidLinksDataProvider()
{   
System.out.println("inside Data Provider");
return validPagesContainer.getValidPages().toArray();
}
}

第一个测试用例

public class ValidateLinks extends TestBase
{
@Test(priority = 1, enabled = true , dataProvider = "validLinksDP")
public void CheckURLValidity(Object currentPage) 
{
String currentPageUrl = ((Webpage)currentPage).getPageUrl();
driver.navigate().to(currentPageUrl);
System.out.println("Inside 'ValidateLinks'"); .....
}

第二个测试用例

public class ConsoleCheck extends TestBase
{   

@Test(priority = 2, enabled = true , dataProvider = "validLinksDP")
public void CheckConsoleErrors(Object currentPage) 
{
String currentPageUrl = ((Webpage)currentPage).getPageUrl();
driver.navigate().to(currentPageUrl);
System.out.println("Inside 'CheckConsoleErrors'"); .....
}

使用第一个测试用例调用数据提供程序时的变量值(工作正常(在此处输入图像描述

使用第二个测试用例调用数据提供程序时的变量值(不工作(在此处输入图像描述

上述问题与DataProvider无关。您需要更改testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite" >
<test  name="Test1">
<classes>
<class
name="Visual_Automation_Team.Visual_Automation_DevOps.ValidateLinks">
<methods>
<include name="CheckURLValidity" />
</methods>
</class>           
</classes>
</test> <!-- Test -->
<test name="Test2">
<classes>

<class
name="Visual_Automation_Team.Visual_Automation_DevOps.ConsoleCheck">
<methods>
<include name="CheckConsoleErrors" />
</methods>
</class>            
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

使全局变量为静态。我不会推荐这种方法。

最新更新