В мире автоматизированного тестирования веб-приложений Selenium WebDriver занимает лидирующие позиции. Для организации и структурирования тестовых скриптов используются различные типы фреймворков. Два популярных подхода – фреймворки, управляемые ключевыми словами (Keyword-Driven Framework) и данными (Data-Driven Framework).
Что такое фреймворк, управляемый ключевыми словами (Keyword-Driven Framework)?
Фреймворк, управляемый ключевыми словами (также известный как таблично-ориентированное тестирование), – это методология автоматизации тестирования, в которой действия, выполняемые в тестовом скрипте, определяются ключевыми словами. Каждое ключевое слово представляет собой определенную операцию, например, «открыть браузер», «ввести текст», «нажать кнопку». Тестовые сценарии создаются путем комбинирования этих ключевых слов в определенной последовательности.
Что такое фреймворк, управляемый данными (Data-Driven Framework)?
Фреймворк, управляемый данными, позволяет выполнять один и тот же тестовый скрипт с различными наборами входных данных. Данные хранятся во внешних источниках (например, Excel, CSV, JSON) и считываются тестовым скриптом во время выполнения. Это особенно полезно для проверки функциональности с различными граничными значениями или наборами данных.
Преимущества и недостатки каждого подхода
- Keyword-Driven:
- Преимущества: Повышенная модульность, возможность повторного использования кода, упрощение поддержки, возможность написания тестов нетехническими специалистами.
- Недостатки: Требуется значительная начальная настройка, возможная сложность при разработке сложных ключевых слов.
- Data-Driven:
- Преимущества: Упрощение тестирования с различными наборами данных, сокращение объема кода, улучшение читаемости.
- Недостатки: Может быть сложнее для реализации сложных тестовых сценариев, зависимость от структуры данных.
Комбинированный подход: фреймворк, управляемый ключевыми словами и данными
Комбинированный фреймворк, управляемый ключевыми словами и данными, объединяет преимущества обоих подходов. Он позволяет определять действия с помощью ключевых слов и выполнять эти действия с различными наборами данных. Это обеспечивает максимальную гибкость и масштабируемость тестового решения.
Архитектура фреймворка, управляемого ключевыми словами и данными
Описание основных компонентов: файлы с ключевыми словами, файлы с данными, драйвер скриптов, объекты страниц
- Файлы с ключевыми словами: Содержат список ключевых слов и их соответствие действиям Selenium WebDriver. Обычно это Excel или CSV файлы.
- Файлы с данными: Содержат наборы входных данных, используемых в тестовых сценариях. Могут быть в форматах Excel, CSV, JSON.
- Драйвер скриптов (Script Driver): Основной компонент фреймворка, который считывает ключевые слова и данные из соответствующих файлов и выполняет соответствующие действия Selenium WebDriver.
- Объекты страниц (Page Objects): Представляют собой классы, инкапсулирующие элементы и методы взаимодействия со страницами веб-приложения. Это способствует повторному использованию кода и упрощает поддержку.
Взаимодействие компонентов между собой
Драйвер скриптов считывает ключевые слова и данные. Ключевые слова определяют, какие действия необходимо выполнить, а данные предоставляют входные параметры для этих действий. Драйвер скриптов использует объекты страниц для взаимодействия с элементами веб-приложения.
Схема архитектуры фреймворка
(Текстовое описание, в реальной статье здесь была бы схема)
- Файлы данных (Excel, CSV, JSON) -> Драйвер скриптов
- Файлы ключевых слов (Excel, CSV) -> Драйвер скриптов
- Драйвер скриптов -> Объекты страниц
- Объекты страниц -> Selenium WebDriver -> Веб-приложение
Шаги по созданию фреймворка, управляемого ключевыми словами и данными в Selenium
Определение ключевых слов и их соответствие действиям Selenium WebDriver
Необходимо определить набор ключевых слов, которые будут использоваться для описания действий в тестовых сценариях. Каждое ключевое слово должно быть четко сопоставлено с конкретным действием Selenium WebDriver. Например:
openBrowser->driver = webdriver.Chrome()enterText->element.send_keys(value)clickElement->element.click()
Создание файлов с ключевыми словами (например, Excel, CSV)
Файлы с ключевыми словами содержат информацию о том, какие действия необходимо выполнить для каждого тестового шага. Обычно они имеют следующую структуру:
| Test Case ID | Keyword | Element Locator | Data |
|—————|————|——————|————|
| TC001 | openBrowser| | |
| TC001 | navigate | | url |
| TC001 | enterText | usernamefield | user123 |
| TC001 | enterText | passwordfield | pass456 |
| TC001 | clickElement| loginbutton | |
Создание файлов с данными (например, Excel, CSV, JSON)
Файлы с данными содержат наборы входных данных, используемых в тестовых сценариях. Они могут иметь различную структуру в зависимости от потребностей тестирования.
Пример JSON:
[
{
"test_case_id": "TC_001",
"username": "user123",
"password": "pass456"
},
{
"test_case_id": "TC_002",
"username": "user789",
"password": "pass012"
}
]
Разработка драйвера скриптов, считывающего ключевые слова и данные и выполняющего соответствующие действия
Драйвер скриптов является ядром фреймворка. Он считывает ключевые слова и данные, определяет соответствующие действия Selenium WebDriver и выполняет их.
Пример реализации фреймворка
Структура проекта и файлов
project_root/
├── keywords.xlsx
├── data.json
├── page_objects/
│ └── login_page.py
├── script_driver.py
└── utils.py
Пример файла с ключевыми словами (с объяснением полей)
Файл keywords.xlsx:
| Test Case ID | Keyword | Element Locator | Data Column |
|—————|————|——————|————-|
| TC001 | openBrowser| | |
| TC001 | navigate | | URL |
| TC001 | enterText | usernamefield | Username |
| TC001 | enterText | passwordfield | Password |
| TC001 | clickElement| loginbutton | |
Test Case ID: Идентификатор тестового случая.Keyword: Ключевое слово, определяющее действие.Element Locator: Локатор элемента, с которым выполняется действие.Data Column: Название столбца в файле данных, содержащего значение для действия.
Пример файла с данными (с объяснением полей)
Файл data.json:
[
{
"Test Case ID": "TC_001",
"URL": "https://example.com/login",
"Username": "testuser",
"Password": "password123"
}
]
Test Case ID: Идентификатор тестового случая (должен совпадать сTest Case IDв файле ключевых слов).URL: URL страницы для навигации.Username: Имя пользователя для ввода в поле.Password: Пароль для ввода в поле.
Пример кода драйвера скриптов (с комментариями)
import json
import openpyxl
from selenium import webdriver
from selenium.webdriver.common.by import By
# Функция для чтения данных из Excel
def read_excel_data(file_path: str) -> list:
"""Читает данные из Excel файла и возвращает список строк."""
workbook = openpyxl.load_workbook(file_path)
sheet = workbook.active
data = []
for row in sheet.iter_rows(values_only=True):
data.append(row)
return data
# Функция для чтения данных из JSON
def read_json_data(file_path: str) -> list:
"""Читает данные из JSON файла и возвращает список словарей."""
with open(file_path, 'r') as f:
data = json.load(f)
return data
# Функция для выполнения ключевых слов
def execute_keyword(driver, keyword: str, locator: str = None, data: str = None):
"""Выполняет действие на основе ключевого слова."""
if keyword == 'openBrowser':
driver = webdriver.Chrome()
return driver # Возвращаем driver, чтобы его можно было использовать дальше
elif keyword == 'navigate':
driver.get(data)
elif keyword == 'enterText':
element = driver.find_element(By.ID, locator)
element.send_keys(data)
elif keyword == 'clickElement':
element = driver.find_element(By.ID, locator)
element.click()
else:
print(f'Неизвестное ключевое слово: {keyword}')
# Основная функция драйвера скриптов
def run_test(keywords_file: str, data_file: str):
"""Запускает тестовый сценарий, считывая ключевые слова и данные."""
keywords_data = read_excel_data(keywords_file)
data_list = read_json_data(data_file)
driver = None # Инициализируем driver перед использованием
for keyword_row in keywords_data[1:]:
test_case_id, keyword, locator, data_column = keyword_row
# Находим данные для текущего тестового случая
test_data = next((item for item in data_list if item['Test Case ID'] == test_case_id), None)
if not test_data:
print(f'Данные для тестового случая {test_case_id} не найдены')
continue
data = test_data.get(data_column) if data_column else None
# Выполняем ключевое слово
if keyword == 'openBrowser':
driver = execute_keyword(None, keyword) # Передаем None, т.к. драйвер еще не создан
else:
execute_keyword(driver, keyword, locator, data)
if driver:
driver.quit()
# Пример использования
if __name__ == '__main__':
run_test('keywords.xlsx', 'data.json')
Преимущества и недостатки фреймворка, управляемого ключевыми словами и данными
Преимущества: масштабируемость, повторное использование кода, простота поддержки, возможность использования нетехническими специалистами
- Масштабируемость: Фреймворк легко масштабируется путем добавления новых ключевых слов и данных.
- Повторное использование кода: Объекты страниц и ключевые слова могут быть повторно использованы в различных тестовых сценариях.
- Простота поддержки: Изменения в веб-приложении требуют внесения изменений только в объекты страниц или файлы с ключевыми словами, а не в сами тестовые скрипты.
- Возможность использования нетехническими специалистами: Тестовые сценарии могут быть созданы нетехническими специалистами путем комбинирования ключевых слов.
Недостатки: сложность начальной настройки, зависимость от файлов данных и ключевых слов
- Сложность начальной настройки: Создание фреймворка требует значительных усилий на начальном этапе.
- Зависимость от файлов данных и ключевых слов: Фреймворк зависит от правильной структуры и содержания файлов данных и ключевых слов.
Рекомендации по использованию и поддержке фреймворка
- Тщательно спланируйте структуру файлов с ключевыми словами и данными.
- Используйте понятные и осмысленные имена для ключевых слов.
- Реализуйте обработку ошибок и логирование.
- Поддерживайте актуальность объектов страниц.
- Документируйте фреймворк и проводите обучение для новых пользователей.