@AfterClass не выполняется

В моей автоматизации тестирования тесты выполняются на двух мобильных устройствах параллельно с помощью testNG feamework. Методы @BeforeClass и @AfterClass находятся в базовом (супер) классе, который наследуют все остальные тестовые классы. Метод BeforeClass инициализирует сеанс драйвера, а метод AfterClass завершает сеанс.

Проблема в том, что @AfterClass не выполняется. Из-за этого сеанс драйвера не завершается, и из-за этого последующий вызов BeforeClass завершается неудачно. Это приводит к выполнению только первого теста в каждом классе - остальные нет.

Мне интересно, сталкивался ли кто-нибудь с этим... и какова причина/устранение!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel Mobile Tests" parallel="tests" thread-count="2"
    preserve-order="true" configfailurepolicy="continue">
    <parameter name="browserTypes" value="Mobile OS" />

    <listeners>
        <listener class-name="my.listeners.TestListener" />
        <listener class-name="my.listeners.CustomReportListener" />
    </listeners>

    <test verbose="2" name="IPHONE_6SPLUS : Parallel Tests">
        <parameter name="device" value="IPHONE_6SPLUS" />
        <parameter name="deviceOS" value="iOS" />
        <classes>
            <!-- ALL INSTALL TESTS -->
            <class name="my.tests.Install" />
            <class name="my.tests.Class1_tests" />
            <class name="my.tests.Class2_tests" />
            <class name="my.tests.Class3_tests" />
            <class name="my.tests.Class4_tests" />
            <class name="my.tests.Class5_tests" />
        </classes>
    </test>

    <test verbose="2" name="IPHONE_SE : Parallel Tests">
        <parameter name="device" value="IPHONE_SE" />
        <parameter name="deviceOS" value="iOS" />
        <classes>
            <!-- ALL INSTALL TESTS -->
            <class name="my.tests.Install" />
            <class name="my.tests.Class1_tests" />
            <class name="my.tests.Class2_tests" />
            <class name="my.tests.Class3_tests" />
            <class name="my.tests.Class4_tests" />
            <class name="my.tests.Class5_tests" />
        </classes>
    </test>

</suite> <!-- Suite -->

person S P    schedule 30.07.2018    source источник


Ответы (1)


Является ли ваш базовый класс общедоступным? Следующий образец работает для меня.

public abstract class A {

 @AfterClass
 tearDown() {...}

}

class B extends A {  

 @Test
 doTests() {...}

}

Вы также можете попробовать @AfterClass (alwaysRun = true)

person Rakesh Pullayikodi    schedule 31.07.2018
comment
Поскольку методы '@BeforeClass' и '@AfterClass' находятся в одном классе и выполняется '@BeforeClass', это не может быть правильным ответом. Вместо этого ОП должен проверить, является ли его метод «@AfterClass» общедоступным или, по крайней мере, защищенным или нет. - person Shivam Mishra; 31.07.2018
comment
Спасибо за указатели. Я проверил, используется аннотация «@AfterClass (alwaysRun = true)» — имеют ли значение пробелы вокруг знака =? Во-вторых, методы общедоступны для '@AfterClass' и '@BeforeClass'. - person S P; 01.08.2018
comment
Проблема все еще существует... :( - person S P; 16.08.2018