Как проводить параллельное тестирование модификаций для приложения grails

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

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

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


person Jörg Brenninkmeyer    schedule 12.11.2010    source источник
comment
Запуск JMeter кажется одним из инструментов, который вы могли бы использовать, хотя, возможно, и не идеальным.   -  person mfloryan    schedule 12.11.2010


Ответы (6)


Недавно я использовал для этого 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 = "[email protected]"
            password = "secret"
            _action_Login().click()
        }
        ...
    }
}

setDefaultTarget(main)

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

person David Tinker    schedule 23.10.2011

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

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

person Hoàng Long    schedule 01.12.2010

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

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

person 01001111    schedule 02.12.2010
comment
Как вы пишете тестовые примеры для Grinder? Могу ли я использовать с ним свои тесты на селен? - person Jörg Brenninkmeyer; 07.12.2010
comment
Тесты Grinder написаны на Python (Grinder использует Jython, Java-реализацию Python). Однако лучше использовать прокси-инструмент, который они предоставляют, для захвата всех HTTP-запросов для теста. Итак, поскольку вы можете генерировать сценарии из запросов с помощью прокси, вы можете использовать свои тесты на селен для создания сценариев Grinder. - person 01001111; 08.12.2010

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

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

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

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

person mikesalera    schedule 05.12.2010
comment
Моя цель - проверить наличие ошибок и производительность при выполнении одновременных операций многими пользователями (например, двумя пользователями, пытающимися изменить одни и те же данные). В настоящее время мои функциональные тесты написаны на Selenium, было бы здорово, если бы я мог их повторно использовать. - person Jörg Brenninkmeyer; 07.12.2010
comment
Попался. Я проверил Selenium FAQ, и, похоже, многие рекомендуют BrowserMob, который является коммерческим сайтом. ‹*** Да, но для этого требуется ОЧЕНЬ МНОГО оборудования. Мы рекомендуем вам попробовать BrowserMob, который выполняет нагрузочное тестирование с настоящими браузерами и работает на Selenium. ‹-------------------------------- wiki.openqa.org/display/SEL / - person mikesalera; 07.12.2010

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

person leebutts    schedule 06.01.2011

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

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

person Joe Sondow    schedule 20.10.2011