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