Имам някои затруднения да разбера как работи методът за достъп „Не премествай курсора автоматично“ за източник на данни за уеб тест. И документацията там изглежда далеч не е изчерпателна.
Първо, нека приемем, че има прост уеб тест само с една заявка. Той използва източник на данни, наречен 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“.
Опитах се да хвана изключението и да спра уеб теста, но това не работи, тъй като тестът изглежда никога не свършва.