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

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

Прежде всего, давайте предположим, что существует простой веб-тест с одним запросом. Он использует источник данных 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».

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

1 Ответ

2 голосов
/ 09 мая 2012

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

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

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

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

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

Если родительский тест должен всегда выполняться, и пропускается только вызываемый тест, то оберните «Call to WebTest» в «String».Сравнение "Условное правило, которое проверяет значение DS.StepList.StepId по отношению к параметру контекста stepId, таким образом вызывая дочерний тест, только когда StepId правильный.

...