синхронизация методов в автоматизации пользовательского интерфейса с помощью Geb+Spock+Gradle+groovy

Предыстория: я использую Geb+Spock+ Gradle для автоматизации тестирования пользовательского интерфейса и использую файл build.gradle, который содержит следующую конфигурацию:

tasks.withType(Test) {
    maxParallelForks = 2
    forkEvery = 1
    include '**/*TestSuite*.class'
}

сейчас два апартамента -›

  • TestSuite1.класс

    а также

  • TestSuite2.класс

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

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

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

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

С уважением Никс


person Nikhil    schedule 29.01.2019    source источник


Ответы (1)


Прежде всего, в показанном вами примере Gradle работает таким образом, что запускает новую JVM, отдельный процесс, для каждого TestSuite. Это означает, что это не проблема многопоточности, а скорее проблема синхронизации процессов.

Вам нужно будет создать какую-то блокировку для ваших процессов. Самый простой способ, который я могу придумать, — это создать каталог блокировки в файловой системе.

Напишите служебный метод, который проверяет наличие каталога блокировки, и если он есть, подождите, пока он не исчезнет, ​​чтобы продолжить. Если каталога нет, создайте каталог. Затем получите доступ к платежной песочнице, только если вы создали каталог.

Имейте в виду, что в зависимости от вашей реализации может возникнуть состояние гонки. Но на практике это не должно быть проблемой. Поскольку тесты пользовательского интерфейса довольно медленные, вы, вероятно, не будете запрашивать с достаточно высокой частотой, чтобы когда-либо заметить это.

person Thomas Hirsch    schedule 23.02.2019