У меня есть рабочий solulion, используя ответы от @John и @Arpad link и @RobWinch link
Я использую Spring Security 3.2.9 и jQuery 1.10.2.
Расширить класс Spring, чтобы вызвать ответ 4XX только из запросов AJAX:
public class CustomLoginUrlAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
public CustomLoginUrlAuthenticationEntryPoint(final String loginFormUrl) {
super(loginFormUrl);
}
// For AJAX requests for user that isn't logged in, need to return 403 status.
// For normal requests, Spring does a (302) redirect to login.jsp which the browser handles normally.
@Override
public void commence(final HttpServletRequest request,
final HttpServletResponse response,
final AuthenticationException authException)
throws IOException, ServletException {
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Access Denied");
} else {
super.commence(request, response, authException);
}
}
}
applicationContext-security.xml
...
...
В моих JSP добавьте глобальный обработчик ошибок AJAX, как показано здесь здесь
$( document ).ajaxError(function( event, jqxhr, settings, thrownError ) {
if ( jqxhr.status === 403 ) {
window.location = "login.jsp";
} else {
if(thrownError != null) {
alert(thrownError);
} else {
alert("error");
}
}
});
. Также удалите существующие обработчики ошибок из вызовов AJAX в JSP-страницах:
var str = $("#viewForm").serialize();
$.ajax({
url: "get_mongoDB_doc_versions.do",
type: "post",
data: str,
cache: false,
async: false,
dataType: "json",
success: function(data) { ... },
// error: function (jqXHR, textStatus, errorStr) {
// if(textStatus != null)
// alert(textStatus);
// else if(errorStr != null)
// alert(errorStr);
// else
// alert("error");
// }
});
Надеюсь, что это поможет другим.
Update1 Я обнаружил, что мне нужно добавить параметр (always-use-default-target = "true") в конфигурацию формы входа. Это было необходимо, так как после запроса AJAX перенаправляется на страницу входа (из-за истекшего сеанса), Spring запоминает предыдущий запрос AJAX и автоматически перенаправляет его после входа в систему. Это приведет к отображению возвращаемого JSON на странице браузера. Конечно, не то, что я хочу.
Update2 Вместо использования always-use-default-target="true"
используйте пример @RobWinch блокировки запросов AJAX из requstCache. Это позволяет нормальным ссылкам перенаправляться на исходную цель после входа в систему, но AJAX переходит на домашнюю страницу после входа в систему.
Мы используем Watin в моем месте занятости, мы - магазин .NET, таким образом, это решение имело большой смысл. Мы на самом деле запустили с Watir (исходная рубиновая реализация) и переключились после. Это было довольно хорошее решение для нас до сих пор
Селен для Интеграционного тестирования, не Поблочного тестирования. Это - тонкое, но важное различие. Использование, которое я обычно вижу, для исправности, проверяющей сборку. т.е. имейте тест, который входит в систему, тест, который (например), отправляет историю, делает комментарий, и т.д.
, идея состоит в том, что Вы тестируете, чтобы видеть, сотрудничает ли целая система перед развертыванием, вместо того, чтобы сделать, чтобы пользователь обнаружил, что Ваш сайт повреждается.
Я главным образом использую CubicTest, который является плагином затмения, который позволяет Вам определить тесты графически. Это может экспортировать/выполнить тесты через несколько библиотек, включая воду и селен. Большинство людей просто использует бегуна Селена все же.
Полное раскрытие: я - один из разработчиков, таким образом, я отчасти смещаюсь :)
Более тщательно изучают здесь: cubictest.openqa.org
-Erlend
Сетка Селена может запустить Ваши веб-тесты через несколько машин параллельно, которые могут ускорить веб-процесс тестирования
Мы используем Ядро Селена, но переключаем постепенно на Селен RC, который намного более хорош и легче справиться. Мы записали много пользовательского кода для создания тестового прогона на наших Непрерывных Серверах интеграции, некоторые из них в параллельных комплектах для выполнения быстрее.
Одна вещь, которую Вы найдете, состоит в том, что Селен, кажется, перезапускает браузер для каждого теста (можно установить его, чтобы не сделать это, но мы получили проблемы памяти, когда мы сделали это). Это может быть медленно в Firefox, но не слишком плохо в IE (одно время, я благодарен за ОС Bill Gates's integraion).
Выезд веб-Тест Canoo . Это - открытый исходный код и основывалось на платформе МУРАВЬЯ.
я провел некоторое время, работая с ним для курса выпускника о программном обеспечении QA, и это, кажется, довольно мощный инструмент тестирования.
Мы используем Выпуск Тестера Visual Studio 2008 года.
Профессионалы: Очень хороший в получении взаимодействия с пользователем
вызовы Ajax Получений
очень легко отобразить ввод данных пользователем на базу данных, XML или файл CSV
, полученный тест может быть преобразован в C# для большего количества управления
, те же тесты могут использоваться для тестирования загрузки и покрытия кода
Недостатки:
Выпуск Тестера VS2008 является отдельным SKU от нормального Developer Edition, что означает дополнительные расходы
, можно быть аллергическими на Microsoft ;-)
, Мы использовали его очень эффективно на проектах, однако там большое усилие, вовлеченное в совершенствование тестов, каждый раз, когда Вы изменяете экран, тест, возможно, должен быть повторно зарегистрирован
, Мы склонны сохранять тесты короткими и резкими, делать одну вещь и выходить вместо того, чтобы записать ценность 10 минут нажатия вокруг в единственном тесте.
у Нас есть несколько стандартных тестовых типов UI:
Тест Меню: Входят в систему как определенный пользователь (или пользовательский тип/роль) и удостоверяются, что все необходимые пункты меню доступны
Валидация: Открывают страницу, и щелчок сохраняют, не вводя данных, гарантируют, чтобы все предупреждения проверки появились. Заполните обязательные поля по одному и проверьте, что предупреждающие сообщения исчезают, когда они, как предполагается.
Поисковый Тест: Поиск с помощью данных из базы данных или файла данных и гарантирует, что корректные данные возвращаются поиском
Тест Ввода данных: Создают новый recrords из файла данных, очистка база данных, чтобы позволить тестам работать многократно
, Тестирование UI является довольно трудоемким, но комфорт, чувствуя, что Вы добираетесь, когда несколько сотен тестов передают перед выпуском новой версии, является бесценным.
Мы используем QuickTestPro. До сих пор это эффективно, но выбор браузера ограничен. Самая хорошая часть является способностью записать действие Вашего браузера и преобразовать его в scriptable набор шагов. Существует также хорошее дополнение .NET поэтому, если у Вас есть какой-либо код доступа, необходимо сделать для различных этапов теста, можно записать методы в блоке и назвать их из сценария.
Ну, при разработке приложения правильно у Вас не будет ставрид логики в UI так или иначе. Это имеет намного больше смысла разделить фактическую работу, сделанную в единицы, отдельные от UI и затем протестировать их.
, Если Вы делаете это, затем единственный код в UI будет кодом, который вызывает бэкенд, таким образом, просто тестирование бэкенда достаточно.
я использовал ASP NUnit в прошлом (в моем задании), и если бы Вы настаиваете на поблочном тестировании Ваш UI, я настоятельно рекомендовал бы Вам использовать ЧТО-ЛИБО кроме ASP NUnit. Это - боль для работы с, и тесты имеют тенденцию делаться недействительным (бывший должный быть пересмотренными) после даже самые незначительные изменения UI (даже если предметы тестов на самом деле не изменяются).
Я - огромный поклонник Селена. При высказывании 'поблочного тестирования сеть ui' не точно точна, поскольку некоторые комментарии упомянули. Однако я действительно нахожу, что Селен невероятно полезен для выполнения подобных принятие и тесты исправности на UI.
А хороший способ начать использует Селен IDE в качестве части Вашей разработки. Т.е., просто имейте IDE, открытый, поскольку Вы разрабатываете и пишете свой тест, когда Вы идете для сокращения dev времени. (Вместо того, чтобы иметь необходимость вручную пройти UI, чтобы перейти к сути дела, где можно протестировать то, что Вы продолжаете работать, просто нажимает кнопку и Селен, IDE будет заботиться об этом для Вас. Это экономит время!)
большинство моих главных сценариев варианта использования имеет Селен тесты RC для резервного копирования их. Вы не можете действительно думать о них как о модульных тестах вроде xUnit платформы, но они - тесты, предназначенные к очень определенной функциональности. Они быстры для записи (особенно, если Вы реализуете общепринятые методики для вещей как вход в систему или установка Ваши тестовые сценарии), быстрый для выполнения, и обеспечьте очень трудную обратную связь. В тех смыслах Селен тесты RC очень подобны к модульным тестам.
я думаю, как что-либо еще, если Вы приложите усилия к надлежащему изучению инструмента тестирования (например, Селен), то Ваше усилие окупится чрезвычайно. Вы упоминаете, что Ваша компания уже использует Селен, чтобы сделать тестирование UI. Здорово. Работа с ним. Если Вы находите, что Селен трудно использует, или сбивающий с толку, придерживается его. Кривая обучения действительно не все, что погружается, после того как Вы изучаете API немного.
, Если я работаю над веб-приложением, его редкое, чтобы я записал существенный объем кода без Селена тесты RC для резервного копирования его. Это - то, как эффективный я нахожу Селен. :) (Надо надеяться, это ответит на Ваш вопрос..)
Мы использовали JSunit некоторое время, чтобы сделать модульные тесты... это не могут быть те же виды тестов, о которых Вы говорите, но это является большим для обеспечения Ваших работ JavaScript, как Вы ожидаете.
Вы выполняете его в браузере, и это может быть установлено в сборке Муравья быть автоматически выполненным против набора браузеров на наборе платформ удаленно (таким образом, можно удостовериться, что код является перекрестным браузером, а также удостоверьтесь, что логика корректна).
я не думаю, что это заменяет Селен, но это дополняет его хорошо.
Я использовал WATIR, который довольно хорош. Мне понравился он, потому что это - Ruby и допускает тестирование интерактивности, доступных элементов и парсинга исходного кода. Я не использовал его некоторое время, но я предполагаю, что это поправилось.
Это, предположительно, портируется к Firefox и Safari, но это происходило некоторое время теперь.
Molybdenum построен поверх Selenium и имеет некоторые дополнительные возможности.