Пример тестирования веб-страницы
В последнее время разрабатывается огромное количество веб-страниц и появляется необходимость протестировать работоспособность всех компонентов с данной страницы. Естественно веб-страницы постоянно расширяются и поэтому мы должны постоянно обновлять и расширять свой драйвер для тестирования. Изменять и дополнять сам код драйвера работа трудоемкая. Поэтому используется следующий подход: создается библиотека функции для тестирования веб-страницы: переход по ссылке, проверка загрузки страницы, клик по компоненту, ввод поля, логин, логаут и т.д. Далее создается входная матрица, в которую записывается все действия, которые предпринимаются для тестирования, эти действия основаны на описанных нами библиотечных функциях. Таким образом при обновлении страницы нам нет необходимости обновлять сам драйвер, мы просто дополняем нашу матрицу и репозитории объектов. Пример входной матрицы:
Include | Action | URL | Name | Pwd | Link | Text |
Y | Navigate | www.web.com | ||||
Y | Login | User | Password | |||
Y | Click | My Page | ||||
Y | Click | Create message | ||||
Y | Edit | InputBox | Hello World | |||
N | Edit | InputBox | This will not be executed | |||
N | Edit | InputBox | This will not be executed | |||
Y | Click | Send message | ||||
N | Logaut | |||||
Y | Click | My page | ||||
Y | Logaut |
Колонка Include содержит Y/N, при желании мы можем временно пропустить выполнение определенного шага. Action – это название вызываемой функции. Name и Pwd – это поля для определенной нами функции Login. Link содержит ссылки по которым будет щелкать наш драйвер. Text – это текст который будет вводится в определенный Inputbox.
Репозитории объектов – это некоторый модуль, в котором описаны все классы, с которыми мы работаем (Мy_page, Send message, Create message и тд.). Далее в нашем драйвере мы описываем обобщенные функции, которые выполняю определенное действие для объектов всех классов. (Специальные средства автоматического тестирования типа Quick Test Professional позволяют автоматически считывать с любого окна объекты в репозитории).
Наш драйвер будет содержать функцию Matrix_Parser, которая считывает последовательно строки из матрицы и вызывает соответствующие функции для определенных объектов.
M ß InputMatrix()
For i ß 1 to M.Length
MatrixParsing(i)
MatrixParsing(int i)
if M[i][1] == ‘N’
then return
else
void (*fptr)(void) // Определяем указатель на функцию (или делегат С#)
fptr = FabricFunction(M[i][2])
switch(M[i][2])
“Navigate”:
Begin
fptr(M[i][3])
LogAction(i, M[i][2])
end
“Click”:
Begin
fptr(M[i][6])
LogAction(i, M[i][2])
end
“Edit”:
Begin
fptr(M[i][7])
LogAction(i, M[i][2])
End
“Login”:
Begin
fptr(M[i][4], M[i][5])
LogAction(i, M[i][2])
end
“Logout”:
Begin
fptr()
LogAction(i, M[i][2])
End
FabricFunction(char *) – это фабричная функция, которая в зависимости от входного параметра возвращает указатель на определенную функцию.
LogAction() – функция логирования, которая записывает в лог-файл все наши действия.