目前,我有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 -->
或
使全局变量为静态。我不会推荐这种方法。