2012-06-20 3 views
2

Я хочу загрузить тестовое корпоративное веб-приложение (которое я не создавал), используя тест максимальной нагрузки Visual Studio 2010. Я хочу, чтобы каждый виртуальный пользователь входил в систему в начале и выходил из системы в конце их запуска произвольных тестов. Я могу правильно настроить нагрузку для этого. Однако есть осложнение. Ключ сеанса вводится в URL, например:Возможно ли сохранение WebTestContext в сеансе загрузки нагрузки ASP.NET?

http://ProductName/(S(ilv3lp2yhbqdyr2tbcj5mout))/System/Container.aspx 

Я преобразовал Visual Studio WebTests для закодированных тестов, а затем модифицировать их с кодом, который использует URL сеанса конкретного. Это прекрасно работает. То, что мне нужно сделать, - это сохранить этот URL-адрес, закодированный в сеансе, в различных тестах, которые запускается конкретным виртуальным пользователем, начиная с класса WebTest входа, в класс WebTest выхода.

Отдельные классы WebTest способны регистрироваться и запускаться в начале и в конце каждого теста. Однако это не точное представление о нормальном использовании. Это приложение эмулирует терминал мейнфрейма и никогда не сокращает соединение или сеанс между запросами веб-браузера. Каждый сеанс представляет собой один длинный интерактивный HTTP-запрос, как и терминал мейнфрейма, взаимодействующий, например, с IBM AS400. Обычно Usert регистрируется в мэйнфрейме в начале дня и (должен) выходить из системы в конце дня. Аналогично, это веб-приложение поддерживает HTTP-запрос до тех пор, пока пользователь не выйдет из системы, или не произойдет тайм-аут сеанса IIS. Поэтому важно, чтобы я сохранял один и тот же сеанс в URL-адресе, между всеми тестами, чтобы обеспечить утечку памяти и другие неприятные ошибки, которые не накапливаются.

Пожалуйста, поделитесь своими мыслями!

ответ

7

Задача 1: сохраняться идентификатор сеанса через тестовых итераций

Вы можете хранить данные в «контексте пользователя», который сохраняется на протяжении всех тестовых итераций. Он найден в WebTestContext с именем «$ LoadTestUserContext». (Но обратите внимание, что этот параметр контекста появляется только в тестовой нагрузки работает, а не в автономном веб-тест работает)

// within WebTestPlugin.PreRequest() or MyExtractionRule.Extract() 
// e is the corresponding eventargs object... 
LoadTestUserContext userContext = (LoadTestUserContext)e.WebTest.Context["$LoadTestUserContext"]; 
... 
// setting the value in the user context (i.e. in the extraction rule) 
userContext["sessionId"] = "(extracted session id)"; 
... 
// getting the value from the user context (i.e. in WebTestPlugin PreWebTest event) 
e.WebTest.Context["sessionId"] = userContext["sessionId"]; 

Вы должны добавить WebTestPlugin (который извлекает значение из контекста пользователя в контекст веб-тест) для всех ваших веб-тестов, чтобы сделать ценность доступной для всех тестов.

Задача 2: Войти/Выход только в начале и в конце испытания нагрузки

  • извлечь для входа и выхода из функции в свои собственные отдельные тесты (помните, что тест выхода из системы также нуждается в WebTestPlugin, что делает выборку хранимый sessionId)
  • в тесте Load Test, диалоговое окно Edit Test Mix позволяет вам указать тест Initialize и Terminate: установите их в только что созданные вами тесты входа и выхода
  • в сценарии тестирования загрузки, установите «Процент новых Пользователи "до 0.

Некоторые дополнительные объяснение «Процент новых пользователей» настройки

«Процент новых пользователей» установка плохо имени и не указывает на его полное поведение.

  • Когда «Новый пользователь» начинает тестовую итерацию, он принимает новый $ WebTestUserId (и получает новый контекст свежего пользователя, который вы сделать не хочет)
  • Когда не "Новый Пользователь»запускает тест итерацию, он сохраняет тот же самый старый $ WebTestUserId (и старый пользовательского контекст, который вы сделать хочет)

до сих пор так хорошо. Но неожиданная часть такова:

  • Каждый «Новый пользователь» выполняет следующие действия во время нагрузочного теста:

    Initialize > web test iteration > Terminate

  • не «Новый пользователь» выполняет следующие действия для всей продолжительность нагрузочного теста:

    Initialize > iteration1 > iteration2 > ... > iterationN > Terminate

Другими словами, «Новые пользователи» постоянно регистрируются и выходят (что вам не нужно). Non-«Новые пользователи» регистрируют только вход и выход один раз во время всего теста нагрузки и постоянно запускают тестовые итерации в течение продолжительности (чего вы действительно хотите).