Параллельное тестирование автоматизации и потокобезопасные переменные - PullRequest
0 голосов
/ 29 апреля 2019

Я параллельно запускаю тесты автоматизации. Различные файлы функций работают в разных браузерах.

В ходе этого курса автоматизации в каждом потоке создается несколько тестовых пользователей (5 функций имеют 5 браузеров).

Проблема в том, что 1 функция создает пользователя = dave + метка времени, другой созданный dave + new-timestamp. Один файл функции должен использовать только пользователя для выполнения, но он использует другого пользователя, созданного другой функцией (потоком).

Я думаю, что мне нужно сделать поток этих пользователей безопасным, чтобы можно было использовать 1 пользователя для каждой функции (потока).

На самом деле, я не являюсь java-разработчиком, а только являюсь QA, проводящим автоматическое тестирование, пожалуйста, предложите, как его реализовать.

Так я передаю нового пользователя для регистрации. endUser.doRegistration(getNewUser(userType));

getNewUser(userType) = дает нового пользователя, если он нулевой, но не останавливает feature2, чтобы создать пользователя для его использования, но этот пользователь между исполнением также приходит к feature1.

1 Ответ

0 голосов
/ 02 мая 2019

Это не похоже на вопрос безопасности потока, мне кажется, что вы просто пытаетесь обмениваться данными между сценариями?Ответ на этот вопрос во многом зависит от вашего приложения и от того, используете ли вы инъекцию зависимостей ... вы не опубликовали своего бегуна, свои файлы функций, пошаговые инструкции или какую-либо информацию о ваших зависимостях, поэтому помощь здесь будет относительно ограниченной ...

Самый простой ответ - создать класс, содержащий пользователя.Что-то вроде этого может работать?

public class UserManager(){
private static User user;

public static User getUser(){
 if(user == null){
   //create your user here... Dave + Timestamp or whatever your user logic is
   user = new User();
  }
 return user;
 }
}

, тогда каждый шаг def должен содержать шаг наподобие `Тогда пользователь извлекается '

Поскольку пользовательский объект здесь статичен, любой stepdef, который нуждается впользователю нужно просто вызвать UserManager.getUser(), чтобы получить пользователя, вы получите один и тот же экземпляр пользователя для каждого шага.

При желании вы можете определить методы в своем классе userManager для сброса пользователя и т. д., если это необходимобыть между тестами.

Теперь .. если у вас действительно есть проблемы с пользовательскими данными, пересекающими границы вашего потока ... тогда у вас есть два варианта.

  1. Использовать локальное хранилище потока дляхранение пользовательских объектов.Вот руководство: https://www.baeldung.com/java-threadlocal

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

...