Как выполнить параллельное тестирование модификации для применения Grails - PullRequest
9 голосов
/ 12 ноября 2010

Я бы хотел запустить тесты, которые одновременно моделируют пользователей, изменяющих определенные данные, для приложения Grails.

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

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

Ответы [ 7 ]

2 голосов
/ 23 октября 2011

Я недавно использовал Geb (http://grails.org/plugin/geb/) для этого. Это слой поверх WebDriver, Selenium и т. Д.) Очень легко написать скрипт Grails, который будет действовать как пользователь в вашем приложении, а затем просто запустить несколько экземпляров на разных консолях. Geb использует синтаксис стиля jQuery для поиска вещей в DOM, что очень круто:

import geb.Browser
import geb.Configuration

includeTargets << grailsScript("_GrailsInit")

target(main: "Do stuff as fast as possible") {

    Configuration cfg = new Configuration(baseUrl: "http://localhost:8080/your_app/")

    Browser.drive(cfg) {
        go "user/login"
        $("#login form").with {
            email = "someone@somewhere.com"
            password = "secret"
            _action_Login().click()
        }
        ...
    }
}

setDefaultTarget(main)

Просто поместите ваш скрипт в scripts / YourScript.groovy, а затем вы можете выполнить «Grails YourScript» для его запуска. Я обнаружил некоторые проблемы с параллелизмом, просто запустив несколько из них на полной скорости. Вам нужно построить войну и правильно ее развернуть, так как Grails в режиме разработки очень медленная и довольно быстро исчерпывает пространство permgen.

0 голосов
/ 20 октября 2011

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

Я сомневаюсь, что вы найдете удобный способ протестировать определенные случаи многопоточного чередования с Selenium, потому что Selenium контролирует браузер, который отправляет запросы на ваш сервер. Я не слышал о способе программирования кода для многопоточных тестов чередования, когда потоки запускаются как реальные веб-запросы к работающему веб-серверу.

0 голосов
/ 06 января 2011

WebTest построен на Ant, который обеспечивает параллельное задание .Возможно, вы сможете использовать это в сочетании с плагином Webtest для параллельного выполнения некоторых действий.Я никогда не пробовал это все же.

0 голосов
/ 05 декабря 2010

Вы в первую очередь заинтересованы в нагрузочном тестировании нескольких активных пользователей, в отличие от тех, у кого только HttpSession?Твердое нагрузочное тестирование основано на действительно хорошем функционале.тестирование однако.Как ваши функциональные тесты организованы и выполнены сегодня?У Grails есть плагин * для этого тоже, и он, похоже, находится в Top of the Pops на портале плагинов.

Вы пытаетесь проверить, как механизм оптимистической блокировки работает под нагрузкой?

Если предыдущий вариант использования означает больше, похоже, вы ищете JUnitPerf .Вот -> загрузка

* функциональный тест <1.2.7> - Функциональное тестирование

0 голосов
/ 02 декабря 2010

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

Если вы хотите сделать это в модульных тестах или тестах интеграции в коде, вы всегда можете раскрутить несколько потоков в коде и заставить их выполнить задачу, которую вы пытаетесь протестировать.

0 голосов
/ 01 декабря 2010

Просто идея: кажется, что запускать клиент одновременно невозможно, но могут ли они ждать друг друга непосредственно перед изменением данных ?

Например, клиент продолжает регистрировать свой процесс: «Клиент х получает данные», «Клиент х редактирует данные» в файле. Они также продолжают искать этот файл журнала, чтобы увидеть прогресс других клиентов. Затем не разрешайте клиенту завершить редактирование DATA, пока другой клиент не отредактирует эти DATA.

0 голосов
/ 12 ноября 2010

Я думаю, вы можете запустить (просто) несколько сценариев Selenium одновременно, или?

Мы тестируем здесь, запустив более 20 сценариев iMacros одновременно, таким образом имитируя 20+ одновременных пользователей в нашем веб-приложении.

...