Создание уникального юзера для отдельного теста при запуске тестов в параллели

Ребята, всем привет :wink:

Подскажите пожалуйста, как сделать генерацию тестовых данных в @BeforeTest, так что бы ети данные были уникальные между тестами. То есть, если запускаю тесты по очереднести, все нормально - каждый раз создаеться новый юзер, но вот когда запускаю тести в паралели (i.e.
gradle clean test -Dtests=RegressionTests -Dparallel=methods -DthreadCount=5 )

  • все катится в топку, так как создаеться один-единственный юзер на все 10+ тестов, и из-за етого тесты падают.

Наверное, нужно что-то со threads написать на джаве, но, увы, я такого не делала и даже не знаю, с чего начать :frowning:

Буду очень благодарна за любую помощь!!!

P.S. Ниже пример кода моих тестов. На строке .enterUsername(user.getEmail()) (если тесты бежат в параллели, не создаеться новый юзер).

``public class RegressionTests extends BaseTest {

User user;
String email;

@BeforeMethod
public void setUp(){
    email = Utils.generateNewGmail();
    user = Utils.createNewUser(email);
}

@AfterMethod(alwaysRun = true)
public void tearDown() {
    Utils.deleteUser(user);
}

@Test
public void checkNewUserLoginSuccessful() {
    
  openLoginPage()
            .enterUsername(user.getEmail())
            .enterPassword("P@SSw0rd!")
            .tapOnLoginButton()
            .checkNewUserWelcomePageIsShown();
}

@Test
public void checkNewUserItemCheckoutIsSuccessful() {
    
  openLoginPage()
            .enterUsername(user.getEmail())
            .enterPassword("P@SSw0rd!")
            .tapOnLoginButton()
            .navigateToItemsPage()
            .addUpWhiteStarsCupItem()
            .checkItemIsAddedSuccessfully;
}

// +10 similar tests, which require new user creation and user deletion

}

Скорее всего, надо тут использовать датапровайдер.
В датапровайдере генерируете массив нужных пользователей, и подключаете это датапровайдер к тесту, и тест автоматом получает уникального пользователя.
https://testng.org/doc/documentation-main.html#parameters-dataproviders

2 лайка

Обьявите юзера как ThreadLocal<User> user = new ThreadLocal
И уже в каждом тесте работайте с этой threadLocal переменной. В BeforeMerhod задавайте юзера user.set(new User) и используйте его user.get().
Вобщем покопайтесь в ThreadLocal Java переменных и найдете ответ на ваш вопрос.

2 лайка

Большое всем спасибо за советы! Буду пробовать :slight_smile:
Как только получиться, сразу же отпишусь!

если я прав, ви используете статические методи для генерации нового юзера. Не знаю как они реализованни внутри, но єто плохая практика, особенно при распаралеливании тестов. Попробуйте убрать статику и созавать екземпляри класов для каждого потока. Ну и конечно как писали више

ThreadLocal<User> user = new ThreadLocal

1 лайк