Не удается передать данные между тегами <test>в комплекте тестов - PullRequest
0 голосов
/ 17 января 2019

Я работаю с XML-файлом TestNG, подобным скопированному внизу этого поста. Чтобы параметризовать тесты браузером, я разбил каждый класс на отдельный узел.

В рамках нашей интеграции с нашим программным обеспечением для отчетов мы храним часть данных, предоставляемых каждым методом тестирования, в массиве списков, который обрабатывается объектом ITestContext. В методе @afterSuite эти объекты загружают эту информацию в наше программное обеспечение для создания отчетов

В других пакетах, где все классы существуют в одном узле, это работает нормально. Однако в этом наборе мы получаем данные только для самого последнего узла. Кажется, он перезаписывает предыдущие три, создавая новый экземпляр ITestContext с каждым. К сожалению, я не могу объединить этот пакет в отдельную, потому что мы потеряем возможность параметризовать тесты.

Мне нужно знать, существует ли приемлемый способ передачи информации между методами тестирования, содержащимися в разных узлах. Я попытался использовать статические переменные в общем родителе (безуспешно), и не могу найти ничего в документах testNG об установке глобальной переменной.

<suite name="UL" parallel="tests" thread-count="1" verbose="10">
    <parameter name="env" value="jobcaseStaging6"/>
    <parameter name="recordTests" value="1"/>
    <listeners>
    </listeners>
    <test name="UL Tests firefox">
        <classes>
            <class name="tests.selenium_tests.ULTests">
                <parameter name="browser" value="firefox"/>
            </class>
        </classes>
    </test>
    <test name="UL Tests chrome">
        <classes>
            <class name="tests.selenium_tests.ULTests">
                <parameter name="browser" value="chrome"/>
            </class>
        </classes>
    </test>
    <test name="UL Tests safari">
        <classes>
            <class name="tests.selenium_tests.ULTests">
                <parameter name="browser" value="bs_safari"/>
            </class>
        </classes>
    </test>
    <test name="UL Tests edge">
        <classes>
            <class name="tests.selenium_tests.ULTests">
                <parameter name="browser" value="bs_edge"/>
            </class>
        </classes>
    </test>
</suite>

1 Ответ

0 голосов
/ 17 января 2019

Таким образом, в основном здесь есть два сценария, и для каждого из сценариев TestNG предоставляет надлежащий способ обмена данными:

  1. Все тестовые классы (Тестовый класс - это класс, в котором размещается один или несколько@Test методы) находятся в том же теге <test> и хотели бы обмениваться данными между собой.

В этом сценарии вы должны использовать объект ITestContext и обмениваться данными через атрибуты объекта ITestContext.

Тестовые классы находятся в одном или нескольких тегах <test> и хотели бы обмениваться данными между собой.

В этом сценарии вы должны использовать объект ISuite и обмениваться данными черезатрибуты объекта ITestContext.

В основном:

  • ITestContext представляет тег <test>, а
  • ISuite представляет тег <suite>
...