Как ограничить (Очередь) число потоков, выполняющихся против данного db (Отдельные данные для каждого параллельного теста)? - PullRequest
0 голосов
/ 04 февраля 2020

Я создал инфраструктуру автоматизации, которая выполняет тестовые наборы одновременно.

В настоящее время, если моя команда БД выполняется несколькими потоками (тестами) одновременно, данные неверны.

Я пытался использовать stati c, synchronized et c безуспешно, есть идеи?

Пример кода:

public static synchronized String createAccount() throws IOException, SQLException {
    DbManager.createDatabaseConnection();
    DbManager.executeSqlUpdateStatement(Account_Creation_Scripts.createAccount_Sql_Command());
    account_pojo.setAccountEmail(locateMostRecentlyCreatedAccount());
    LoggerInstance.log("Account created: " + account_pojo.getUniEmail());
    DbManager.closeDatabaseConnection();
    return tutor_pojo.getAccountEmail();
}

Если я запускаю код с использованием экземпляра потока x1, каждый тест будет создавать и извлекать правильные учетные записи из базы данных dt et c.

Обратите внимание:

  • Нет исключений.
  • Эта проблема возникает только при одновременном запуске более одного потока, например:
test1 = uses account: email1@email.com
test2 = uses account: email2@email.com
test3 = uses account: email3@email.com
test4 = uses account: email3@email.com

Как видно, как test3, так и 4 используют один и тот же адрес электронной почты, хотя в базе данных видны email1-4@email.com.

1 Ответ

1 голос
/ 04 февраля 2020

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

Кроме того, здесь вы не контролируете свой ввод. Возможно, вам придется изменить код, чтобы он принимал некоторые параметры в createAccountMethod, в этом случае каждый из ваших тестов может использовать отдельную жестко закодированную электронную почту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...