Порядок выполнения классов тестов TestNG

Я прочитал много статей по этой теме и еще не нашел той, которая решает мою проблему.

Цель:

  1. Получите тестовые классы, определенные в файле testng.xml, для выполнения в порядке, указанном в файле.
  2. Определите все методы в каждом классе fire в указанном порядке (это работает)
  3. В любой момент времени должно быть открыто только одно окно браузера (БЕЗ параллельного выполнения)

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

Я бы хотел ...

Начните тестовый класс A Запустите все методы в тестовом классе A. Закройте браузер с помощью метода @AfterTest в тестовом классе A. Перейдите в тестовый класс B ...

Я надеюсь, что есть способ заставить TestNG сделать это. Кроме того, я запускаю тесты из командной строки maven, используя mvn test -Dbrowser = chrome с надёжным плагином, который вызывает мой определенный файл TestNG.xml.

Текущий файл TestNG.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <listeners>
        <listener class-name="com.infdig.qa.Listeners" />
        <listener class-name="com.infdig.qa.resources.ExtentReporterNG" />
    </listeners>
    <test name="Regression"  >
        <classes>
            <class name="com.infdig.qa.BasicSiteNavigationTests">
                <methods>
                    <include name="openedToDashboard" />
                    <include name="navigateToActiveReleasePreset" />
                    <include name="navigateToReleasePresets" />
                    <include name="navigateToComponentSelections" />
                    <include name="navigateToOrderSlices" />
                    <include name="navigateToAbout" />
                </methods>
            </class>
            <class name="com.infdig.qa.AboutPageTests">
                <methods>
                    <include name="validateAboutPageDescriptionText" />
                    <include name="validateAboutPageLegalText" />
                    <include name="validateAboutPageHelpText" />
                    <include name="validateHelpLinkToInfinityPortal" />
                </methods>
            </class>
            <class name="com.infdig.qa.ReleasePresetTests">
                <methods>
                    <include name="deleteAllExistingPresets" />
                    <include name="createInitialPresets" />
                    <include name="changeActivePreset" />
                    <include name="addNewReleasePreset" />
                    <include name="deletePreset" />
                    <include name="addMultiplePresets" />
                    <include name="searchForPresetByName" />
                    <include name="deleteMultiplePresetsAtOnce" />
                    <include name="validateHelpTextIsAccurate" />
                </methods>
            </class>
            <class name="com.infdig.qa.OrderSliceTests">
                <methods>
                    <include name="deleteAllSlices" />
                    <include name="createNewOrderSlice" />
                    <include name="editExistingOrderSlice" />
                </methods>
            </class>
        </classes>
    </test>
</suite>

person bboursaw73    schedule 02.04.2020    source источник


Ответы (1)


В вашем файле runner xml TestNG нет важных параметров

  • preserve-order = "true" для запуска по порядку. Здесь вы можете найти более подробную информацию.

Я думаю, вы смешиваете метод AfterTest и метод AfterClass, после того, как тестовый метод закроет ваш браузер один раз, ПОЧЕМУ? Поскольку в XML-файле у вас есть только 1 тестовый тег, метод AfterTest выполняется соответственно тестовые теги. Как вы писали, я понимаю, что вы хотите запустить тестовые методы класса A, а затем класса B, для этого вы должны поместить каждый тег класса внутри тестового тега, что означает, что у вас есть 4 тега класса, поэтому вам нужно 4 тестовых тега.

ИЛИ

Вы можете сохранить xml, как указано выше, но вам нужно изменить метод AfterTest на AfterClass.

Вот различия в аннотациях:

  • @AfterTest: аннотированный метод будет запущен после того, как будут выполнены все тестовые методы, принадлежащие классам внутри тега.

  • @AfterClass: аннотированный метод будет запущен после того, как будут запущены все тестовые методы в текущем классе.

  • @AfterMethod: аннотированный метод будет запускаться после каждого тестового метода.

person Nael Marwan    schedule 04.04.2020
comment
Превосходно! Это дало мне результат, к которому я стремился. Спасибо! - person bboursaw73; 07.04.2020