При наличии 2 тестовых случаев в 2 разных классах с использованием одного и того же поставщика данных все значения в суперклассе сбрасываются до нуля при выполнении 2-го случая.

На данный момент у меня 3 класса

  • Тестовая база —> которая отвечает за настройку всех глобальных переменных, необходимых в работающем пакете (например, конфигурация веб-драйвера)
  • 2 тестовых примера, каждый в отдельном классе, расширяют тестовую базу
  • Проблема заключается в том, что при запуске TestNG.xml все глобальные переменные в тестовой базе сбрасываются до нуля при выполнении второго 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'"); .....
}

Значение переменных при вызове поставщика данных с первым тестовым примером (работает правильно) введите здесь описание изображения

Значение переменных при вызове поставщика данных со вторым тестовым примером (не работает) введите здесь описание изображения


person Abanoub Erian    schedule 04.01.2021    source источник


Ответы (1)


Вышеупомянутая проблема не связана с 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 -->

ИЛИ

Сделать глобальную переменную статической. Я не буду рекомендовать этот подход.

person Rahul L    schedule 05.01.2021