Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как загрузить параметры из testng.xml без использования аннотации @Parameters

java
testng
Теги: #<Tag:0x00007f7b6a13c530> #<Tag:0x00007f7b6a13c350>

#1

Имею строчку в коде:

private String host;

Имею файл testng.xml, в котором указал параметр:

<parameter name="host" value="//localhost" />

Переменная host у меня не юзается внутри метода, если бы так - то я использовал бы аннотацию @Parameters

Как мне загрузить этот параметр из testng.xml?


(Александр Таранков) #2

Аннотацию @Parameters можно использовать не только с тестовым методом, но и, например, с @BeforeMethod или @BeforeTest и там прочитать значение.

Или в чём вопрос?


#3

Да, но тогда эти параметры нужно будет поместить во внутрь функции, а они у меня просто как поля класса, вне функций.


(Александр Таранков) #4

По простому схема работы с внешними параметрами может выглядеть так:

  1. в testng.xml есть параметры (они могут также передаваться через параметры командной строки или через окружение, не суть важно)
  2. при старте теста (например @BeforeTest) ты читаешь эти параметры в поля класса, от которого наследуются тесты
  3. у этого класса есть get-методы (геттеры), которые возвращают значения приватных полей класса. Они могут иметь модификаторы public
  4. в тестах дергаешь эти геттеры для чтения параметров

Это только одна из реализаций, просто для примера


(Sergey Korol) #5
@BeforeMethod
public void setUp(ITestContext context) {
    Map<String, String> parameters = context.getCurrentXmlTest().getAllParameters();
}

П.С. Подойдет любая аннотация Before, где виден текущий контекст. Чтобы получить локальные изолированные параметры методов (include), придется залезть глубже в структуру контекста.

Предвкушая возможный вопрос: нет, вызывать метод самостоятельно не нужно, контекст будет вставлен автоматически (если конечно ваш Before метод находится в области видимости теста, к примеру, в родительском классе).