Почему мои методы @BeforeTest иногда указываются как последний элемент предыдущего теста?

У меня есть комплект testNG, выполняющий некоторый код селена. Я тестирую навигацию между страницами в моем веб-приложении. Существует четыре различных уровня пользователя, которые предоставляют доступ к закрытым страницам в зависимости от типа пользователя. Мне также нужно проверить это в Chrome и IE.

Я следовал учебному пособию по Mkyong.com для моей установки testng.xml.

Я решил собрать все навигационные тесты для всех пользователей и обоих браузеров в одном testng.xml. Это дает в общей сложности 8 тестовых классов, где 4 и 4 имеют один и тот же класс конфигурации, выполняемый до запуска тестов.

testng.xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Releaseboard Local tests" parallel="none">


    <test name="user1 chrome">
        <classes>
            <class name="testsuite.ChromeConfig" />
            <class name="testcase.User1NavigationTests" />
        </classes>
    </test>
    <test name="user2 chrome">
        <classes>
            <class name="testsuite.ChromeConfig" />
            <class name="testcase.User2NavigationTests" />
        </classes>
    </test>
    <test name="user3 chrome">
        <classes>
            <class name="testsuite.ChromeConfig" />
            <class name="testcase.User3NavigationTests" />
        </classes>
    </test>
    <test name="user4 chrome">
        <classes>
            <class name="testsuite.ChromeConfig" />
            <class name="testcase.User4NavigationTests" />
        </classes>
    </test>


    <test name="user1 ie">
        <classes>
            <class name="testsuite.IeConfig" />
            <class name="testcase.User1NavigationTests" />
        </classes>
    </test>
    <test name="user2 ie">
        <classes>
            <class name="testsuite.IeConfig" />
            <class name="testcase.User2NavigationTests" />
        </classes>
    </test>
    <test name="user3 ie">
        <classes>
            <class name="testsuite.IeConfig" />
            <class name="testcase.User3NavigationTests" />
        </classes>
    </test>
    <test name="user4 ie">
        <classes>
            <class name="testsuite.IeConfig" />
            <class name="testcase.User4NavigationTests" />
        </classes>
    </test>
</suite>

Теперь, когда я запускаю эти тесты, я ожидаю эти выходные данные для всех 8 тестовых классов:

Не имеет значения, являются ли они красными или зелеными, но я ожидаю, что все тестовые теги из xml будут начинаться на два уровня и всегда на одном уровне. Существует также уровень выше трех показанных, но это не имеет значения в данный момент.

Однако вывод, который я получаю, заключается в том, что иногда следующий уровень 2 отображается внутри предыдущего уровня 1. Затем происходит сбой аннотированного метода @BeforeTest. Это само по себе не так уж и плохо, потому что на самом деле он также запускает тест на уровне 1 после неудачи внутри предыдущего теста. Однако, если тест обнаружился внутри предыдущего, он всегда завершается ошибкой @BeforeTest и на уровне 1, и все методы тестирования уровня 3 автоматически пропускаются. Смотрите изображение ниже:

Все строки со временем в конце являются реальными строками на скриншоте. Остальное было отредактировано для анонимности.

Обратите внимание, что мои методы @BeforeTest и @AfterTest, setup и tearDown теперь почему-то перечислены в качестве тестов. Как внутри неправильного теста, без каких-либо реальных методов тестирования, так и внутри следующего, внезапно с фактическими методами тестирования. Эти ошибки появляются совершенно случайно каждый раз. Нет конкретного теста, который всегда содержит следующий. Иногда их три, иногда только один. Единственное, что согласуется, это то, что никогда не бывает двух подряд. Я действительно очень не понимаю, что здесь происходит. Я хотел бы объяснить лучше или провести больше исследований, но мне очень трудно свести эту проблему к поисковому термину. У меня есть чувство, что это может остаться без ответа, пока я не смогу наложить на это награду.

Я опубликую любые другие примеры кода, которые каждый может захотеть увидеть, но сейчас я не знаю, с чего начать.

1 ответ

Похоже, что ответ на мой вопрос заключается в том, что именно это происходит при сбое аннотированного метода @BeforeTest. Другими словами, тот факт, что настройка и разборка обнаруживается в иерархической структуре предыдущих тестов, вероятно, является лишь незначительной ошибкой отчетности на стороне testNG. Это не является причиной какой-либо ошибки. Причина ошибки и пропущенные тесты в моем случае являются результатом нестабильного метода установки. Тот факт, что иногда это работало, а иногда нет, был вызван наличием на моих страницах чувствительных небольших условных элементов, которые иногда находились / загружались вовремя, а иногда - нет.

Другие вопросы по тегам