Как вызвать MoveDataTableCursor в плагине веб-тестирования, чтобы просмотреть ограниченный набор строк в таблице?

У меня есть некоторые трудности с пониманием того, как метод доступа «Не перемещать курсор автоматически» работает для источника данных веб-тестирования. И документация там, кажется, далеко не исчерпывающая.

Прежде всего, предположим, что есть простой веб-тест с одним запросом. Он использует источник данных DS с таблицей StepList, содержащей 5 строк.

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

В этих условиях тест запускается 5 раз для каждой строки, поэтому он перемещает курсор автоматически. Это предназначено?

Теперь перейдем к практическому вопросу, которому и посвящен этот пост.

В приведенной выше таблице StepList есть, среди прочего, столбец идентификаторов и столбец StepId. Рассматриваемый веб-тест на самом деле вызывается из другого веб-теста, и предполагается, что он будет выполняться только для тех строк таблицы, для которых в контексте теста установлен StepId.

Id  StepId
1   1
2   1
3   2
4   2
5   2

Для этого я следовал рекомендациям из здесь и написал подключаемый модуль для веб-тестирования с методом PreWebTest, который выглядит следующим образом:

public override void PreWebTest(object sender, PreWebTestEventArgs e)
{
    string stepId = string.Empty;

    if (e.WebTest.Context.ContainsKey(ContextParameterName))
    {
        stepId = e.WebTest.Context[ContextParameterName].ToString();
    }

    while (e.WebTest.Context["DS.StepList.StepId"].ToString() != stepId)
    {
        e.WebTest.MoveDataTableCursor("DS", "StepList");
    }
}

Вышеприведенный код работает правильно в примере таблицы только в том случае, если stepId имеет значение «2». Если это «1», то MoveDataTableCursor выдает исключение WebTestEndOfDataException: «Больше нет строк данных в таблице источника данных с AccessMethod Unique».

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


person Paul    schedule 14.03.2012    source источник


Ответы (1)


Чтобы ответить на ваш первый вопрос: параметр «Не перемещать курсор автоматически» применяется к запускам в рамках только нагрузочного теста, поэтому курсор по-прежнему автоматически перемещается во время веб-теста, где вы используете параметр « Один запуск на строку источника данных". Конечно, последний параметр применяется только к запускам веб-тестирования.

Причина, по которой вы получаете исключение WebTestEndOfDataException:

  1. Способ реализации механизма тестирования Visual Studio «Один запуск для каждой строки источника данных» включает в себя тот факт, что для всех пяти тестов используется только один курсор данных; то есть состояние курсора запоминается между всеми 5 тестами.
  2. Каждая итерация теста автоматически увеличивает курсор данных сам по себе.
  3. Ваш подключаемый модуль передвигает курсор данных в рамках этого набора из 5 тестов, обязательно исчерпывая доступные строки до завершения 5 тестов.

Самый простой способ заставить ваш тест работать — вручную установить количество итераций вместо использования «Один запуск на строку источника данных». Например, в ваших данных есть только две допустимые строки, поэтому установите число итераций равным 2. Однако это тоже плохое решение, поскольку вам придется вручную подсчитывать строки и изменять значение.

Следующий лучший способ — изменить ваш WebTestPlugin таким образом, чтобы он проверял значение DS.StepList.StepId и выполнял WebTest.Stop(), если оно не соответствует желаемому значению. Таким образом, нежелательные итерации будут немедленно прекращены. Тем не менее, они все равно будут тратить время и добавлять визуальный беспорядок.

Если родительский тест должен выполняться всегда, а следует пропустить только вызванный тест, оберните «Вызов веб-теста» в условное правило «Сравнение строк», которое проверяет значение DS.StepList.StepId в контексте stepId. параметр, поэтому дочерний тест вызывается только тогда, когда StepId правильный.

person agentnega    schedule 09.05.2012