Как работает комплексный тест на поиск
Папка complex_search в коде
Что тест содержит
dbStartEtalonfeature.params.xml
dbStart
Стандартный, перечисляем в нем все нужные таблички БД — folk, device.
Etalon
Эксель со страницами:
Search– соответствует обычному поиску.Extended Search– соответствует расширенному поиску.Sorting– сортировка.ByField– фильтрация по колонкам (Field— наименование поля из java-класса).
Пример страницы "Поиск":
|
|
|
| Q_1 | Q_2 | ... | Q_N |
ФИО | ... | Автор изменений | ID | ЕЛЕНА | Тест | ... | Query N |
|---|---|---|---|---|---|---|---|
Морозова Елена Викторовна |
|
| 1 | 1 |
|
| 1 |
Галкина |
| Тест | 2 | 1 | 1 |
| 1 |
Пример страницы "Сортировка"
|
|
| S_1 | S_2 | ... | S_N |
ФИО | ... | ID | surname ASC | patronymic DESC | ... | Пол |
|---|---|---|---|---|---|---|
Морозова Елена Викторовна |
| 1 | 2 | 1 |
| 1 |
Галкина |
| 2 | 1 | 2 |
| 1 |
ID - поле, по которому будет сравнение, ID party.
Слева от него - вся вспомогательная информация, которая может помочь при составлении кейсов.
Query N - некий запрос, например, "Морозова". В тех ячейках, party которых запрос должен вернуть, ставится значение 1, в остальных пусто — запрос не возвращает этих контрагентов.
Q_ID - уникальный идентификатор запроса в рамках всего теста. То есть первая строка в эталоне — это просто названия тестов. Они нужны, если что-то упадет, чтобы понять, что именно развалилось. Правила наименования — без русских букв и пробелов. А в остальном как хотите, главное, чтобы название было уникально
ID записей в Etalon и в dbStart совпадают.
feature.params.xml
Файл с параметрами для теста. Позволяет настраивать, какие именно тест-кейсы будут проверены.
Пример файла:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="toComplexSearchDescriptor.test_51_01_complex_search" parent="toComplexSearchDescriptor.party">
<constructor-arg index="0" value="BySurname:RegExp_All + ByActualityDate:EMPTY"/>
</bean>
</beans>При запуске теста с таким конфигом будут проверены не все комбинации, а только конкретная – запрос с Q_ID = RegExp_All с листа BySurname + запрос с Q_ID = EMPTY с листа ByActualityDate
Как работает тест
Однократно загружает все записи из dbStart, в котором информация представлена в обычном для БД виде.
Проверяет все одиночные запросы для каждой страницы из etalon, сравнивая полученные записи с ожидаемыми (напротив которых для данного запроса стоят единички в Etalon).
Генерирует сложные тест-кейсы для всех возможных парных комбинаций функций поиска, фильтрации и сортировки. (Единственная невозможная пара - это одновременное использование Поиска и Расширенного Поиска). Пример: "Поиск" + "Фильтрация" или "Расширенный поиск" + "Фильтрация по полю".
Рассчитывает на основе эталона ожидаемое значение результата поиска для сгенерированных кейсов.
Для сложных кейсов есть ограничения:
Максимальное количество кейсов для пар поисковых запросов – 80% от общего числа кейсов.
Максимальное количество кейсов для троек поисковых запросов – 50% от общего числа кейсов.
Логирование
Для каждого тест-кейса тест пишет в лог:
Для одиночных запросов – "Q_ID".
Для комбинированных запросов – "SheetName1:Q_ID1 + SheetName2:Q_ID2".
Результат проверки запроса (ожидалось X записей, получено Y записей).
В случае проверки сортировки записи выводятся в том порядке, в котором их ожидали получить и рядом в порядке, как они реально получены.
В случае возникновения эксепшена в процессе поиска/фильтрации сортировки тест должен падать и выводить стектрейс эксепшена в лог.
Алгоритм для генерации кейсов
Берем декартово произведение для каждой колонки каждого листа с каждой колонкой каждого листа.
Случайным образом выбираем 80% и 50% результирующих кейсов в качестве пар и троек.
Опции для фильтрации по колонкам
Фильтрация по текстовому полю:
EMPTY – поле пустое.
NOT_EMPTY – поле непустое.
RE[] – аналог фильтрации "Выражение" в интерфейсе, в квадратных скобках указывается поисковый запрос вида [Иванов %].
Фильтрация по дате:
EMPTY – поле пустое.
NOT_EMPTY – поле непустое.
DEQ[] – проверка на совпадение с конкретной датой, в квадратных скобках указывается дата вида [01.01.2012].
DIN[] – проверка на то, что дата находится в указанном интервале, в квадратных скобках указывается интервал дат вида [01.11.2011;02.12.2011].
Фильтрация по булевскому значению (да/нет):
EMPTY – поле пустое.
NOT_EMPTY – поле непустое.
BV[] – проверка на значение флага, в квадратных скобках указывается значение вида [true] или [false].
Фильтрация по enum-полю:
EMPTY – поле пустое.
NOT_EMPTY – поле непустое.
E[] – проверка на значение поля, в квадратных скобках указываются литеры вида [MALE,FEMALE].