t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007f9afee0bf78> #<Tag:0x00007f9afee0be88>

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

private String host;

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

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

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

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

1 Симпатия

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

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

1 Симпатия

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

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

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

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

1 Симпатия
@BeforeMethod
public void setUp(ITestContext context) {
    Map<String, String> parameters = context.getCurrentXmlTest().getAllParameters();
}

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

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

1 Симпатия