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