Как да извикате 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(), ако не съвпада с желаната стойност. По този начин нежеланите итерации ще прекратят незабавно. Те обаче все още ще губят време и ще добавят визуална бъркотия.

Ако родителският тест винаги трябва да се изпълнява и трябва да се пропусне само извиканият тест, тогава обвийте „Извикването към WebTest“ в условно правило „Сравнение на низове“, което проверява стойността на DS.StepList.StepId спрямо контекста на stepId параметър, като по този начин извиква дъщерния тест само когато StepId е правилен.

person agentnega    schedule 09.05.2012