Как работает комплексный тест на поиск

Как работает комплексный тест на поиск

Папка complex_search в коде

Что тест содержит

  • dbStart

  • Etalon

  • feature.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

Как работает тест

  1. Однократно загружает все записи из dbStart, в котором информация представлена в обычном для БД виде.

  2. Проверяет все одиночные запросы для каждой страницы из etalon, сравнивая полученные записи с ожидаемыми (напротив которых для данного запроса стоят единички в Etalon).

  3. Генерирует сложные тест-кейсы для всех возможных парных комбинаций функций поиска, фильтрации и сортировки. (Единственная невозможная пара - это одновременное использование Поиска и Расширенного Поиска). Пример: "Поиск" + "Фильтрация" или "Расширенный поиск" + "Фильтрация по полю". 

  4. Рассчитывает на основе эталона ожидаемое значение результата поиска для сгенерированных кейсов.

  5. Для сложных кейсов есть ограничения:

    1. Максимальное количество кейсов для пар поисковых запросов – 80% от общего числа кейсов. 

    2. Максимальное количество кейсов для троек поисковых запросов – 50% от общего числа кейсов. 

Логирование

Для каждого тест-кейса тест пишет в лог:

  • Для одиночных запросов – "Q_ID".

  • Для комбинированных запросов – "SheetName1:Q_ID1 + SheetName2:Q_ID2".

  • Результат проверки запроса (ожидалось X записей, получено Y записей).

  • В случае проверки сортировки записи выводятся в том порядке, в котором их ожидали получить и рядом в порядке, как они реально получены.

  • В случае возникновения эксепшена в процессе поиска/фильтрации сортировки тест должен падать и выводить стектрейс эксепшена в лог.

Алгоритм для генерации кейсов

  1. Берем декартово произведение для каждой колонки каждого листа с каждой колонкой каждого листа.

  2. Случайным образом выбираем 80% и 50% результирующих кейсов в качестве пар и троек.

Опции для фильтрации по колонкам

Фильтрация по текстовому полю:

  1. EMPTY – поле пустое.

  2. NOT_EMPTY – поле непустое.

  3. RE[] – аналог фильтрации "Выражение" в интерфейсе, в квадратных скобках указывается поисковый запрос вида [Иванов %].

Фильтрация по дате:

  1. EMPTY – поле пустое.

  2. NOT_EMPTY – поле непустое.

  3. DEQ[] – проверка на совпадение с конкретной датой, в квадратных скобках указывается дата вида [01.01.2012].

  4. DIN[] – проверка на то, что дата находится в указанном интервале, в квадратных скобках указывается интервал дат вида [01.11.2011;02.12.2011].

Фильтрация по булевскому значению (да/нет):

  1. EMPTY – поле пустое.

  2. NOT_EMPTY – поле непустое.

  3. BV[] – проверка на значение флага, в квадратных скобках указывается значение вида [true] или [false].

Фильтрация по enum-полю:

  1. EMPTY – поле пустое.

  2. NOT_EMPTY – поле непустое.

  3. E[] – проверка на значение поля, в квадратных скобках указываются литеры вида [MALE,FEMALE].