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

TestNG. Как хранить данные окружения при параллельном запуске

Теги: #<Tag:0x00007fd76e22fd88> #<Tag:0x00007fd76e22fc98> #<Tag:0x00007fd76e22fbd0> #<Tag:0x00007fd76e22fa90> #<Tag:0x00007fd76e22f9a0> #<Tag:0x00007fd76e22f8b0>

Есть тест, который запускается с определенными наборами данных.
И есть какой-то набор данных, на которые завязаны методы работы с БД.

Пусть это будет язык клиента. Вот в зависимости от языка мы должны обращаться к разным БД
Можно ли как-то хранить и не передавать из метода в метод? При этом что бы у каждого потока он был разный

В статическом каком-то классе невозможно, т.к. каждый тест будет перезаписывать это значение

1 Симпатия

Если для каждого потока нужно хранить собственное глобальное значение, то можно использовать java.lang.ThreadLocal переменную. Она будет хранить собственное значение для каждого потока.

Например, создаёте глобальную статическую тредлокал переменную:

public final static ThreadLocal<Map<String, String>> TEST_CONTEXT = new ThreadLocal<>();

Записываете в неё конфигурацию для текущего потока:

Map<String , String > testContext = Map.of(“language”, “en”, “username”, “user1”);
TEST_CONTEXT.set(testContext);

Когда конфигурация становится не нужна, удаляете из тредлокал переменной значение для текущего треда (и потом можно устанавливать новое значение):

TEST_CONTEXT.remove();

2 Симпатий

Чтобы переменная была разная для каждого потока, используйте Java ThreadLocal

1 Симпатия