Я провожу нагрузочное тестирование веб-страницы с помощью инструмента нагрузочного тестирования Visual Studio, но у меня возникают проблемы с отображением результатов. Проблема в сеансе без файлов cookie. Каждый раз, когда новый пользователь заходит на страницу, URL-адрес страницы меняется, и я не могу рассчитать среднее время отклика страницы. Что можно с этим сделать?
Получение статистики на странице сеанса без файлов cookie с использованием функции нагрузочного тестирования VS2008
Ответы (1)
Мы переместили куки в строку запроса.
До этого я написал обработчик событий проверки URL-адреса, нечувствительный к регистру, который игнорирует сеансовый компонент URL-адреса. Тот, что ниже, удаляет только чувствительность к регистру.
class QueryLessCaseInsensitiveValidateResponseUrl : ValidateResponseUrl
{
public override void Validate(object sender, ValidationEventArgs e)
{
Uri uri;
string uriString = string.IsNullOrEmpty(e.Request.ExpectedResponseUrl) ? e.Request.Url : e.Request.ExpectedResponseUrl;
if (!Uri.TryCreate(e.Request.Url, UriKind.Absolute, out uri))
{
e.Message = "The request URL could not be parsed";
e.IsValid = false;
}
else
{
Uri uri2;
string leftPart = uri.GetLeftPart(UriPartial.Path);
if (!Uri.TryCreate(uriString, UriKind.Absolute, out uri2))
{
e.Message = "The request URL could not be parsed";
e.IsValid = false;
}
else
{
uriString = uri2.GetLeftPart(UriPartial.Path);
////this removes the query string
//uriString.Substring(0, uriString.Length - uri2.Query.Length);
Uri uritemp = new Uri(uriString);
if (uritemp.Query.Length > 0)
{
string fred = "There is a problem";
}
//changed to ignore case
if (string.Equals(leftPart, uriString, StringComparison.OrdinalIgnoreCase))
{
e.IsValid = true;
}
else
{
e.Message = string.Format("The value of the ExpectedResponseUrl property '{0}' does not equal the actual response URL '{1}'. QueryString parameters were ignored.", new object[] { uriString, leftPart });
e.IsValid = false;
}
}
}
}
}
Вызывается
public EventHandler<ValidationEventArgs> AddUrlValidationEventHandler(WebTestContext context, WebTest webTest)
{
EventHandler<ValidationEventArgs> urlValidationRuleEventHandler = null;
// Initialize validation rules that apply to all requests in the WebTest
if ((context.ValidationLevel >= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.Low))
{
QueryLessCaseInsensitiveValidateResponseUrl validationRule1 = new QueryLessCaseInsensitiveValidateResponseUrl();
urlValidationRuleEventHandler = new EventHandler<ValidationEventArgs>(validationRule1.Validate);
webTest.ValidateResponse += urlValidationRuleEventHandler;
}
return urlValidationRuleEventHandler;
}
Теперь все, что мне нужно сделать, это добавить
//add case insensitive url validation for all requests
urlValidationRuleEventHandler = common.AddUrlValidationEventHandler(this.Context, this);
в веб-тест, чтобы получить вызов без учета регистра. Имейте в виду, что этот код содержит следующую недопустимую строку
string fred = "There is a problem";
person
Nat
schedule
07.03.2010
К моему стыду, я никогда не понимал, как проверка запроса может помочь мне рассчитать общую статистику по запросу. Я был бы признателен, если бы вы попытались объяснить мне это еще раз. Теперь вот моя история, в конце концов я понял, что могу просто поместить любой запрос в транзакцию и получить статистику только по этой транзакции. Это вообще не требует никакого кодирования и выглядит достаточно гибким, чтобы поддерживать большинство вариантов использования.
- person Sergej Andrejev; 31.05.2010
Извините, это моя беда. Вы можете использовать валидатор для извлечения сеанса из URL-адреса, и таким образом все URL-адреса будут правильно сравниваться.
- person Nat; 14.06.2010
Лучше всего переместить сеанс в строку запроса, устранив необходимость в пользовательском валидаторе.
- person Nat; 14.06.2010